My question:
Is this:
if (...) {
} else if (...) {
}
Equal to this?
if (...) {
} else {
if (...) {
}
}
Indeed, I guess that in the two cases the result would be the same but is else..if a different statement in C ?
My question:
Is this:
if (...) {
} else if (...) {
}
Equal to this?
if (...) {
} else {
if (...) {
}
}
Indeed, I guess that in the two cases the result would be the same but is else..if a different statement in C ?
if (...) {
} else if (...) {
}
is same as
if (...) {
} else {
if (...) {
}
}
but
if (...) {
} else if (...) {
}
is not same as
if (...) {
} else {
... // extra statements
if (...) {
}
}
The C language has no feature called else if. That one is only obtained through coding style. Your example is 100% equivalent to this:
if (...) {
}
else
if (...) {
}
Where the second if is a single statement below else, so we can write it without {}.
To address the comments suggesting drawing truth table, logically equivalent programs aren't always the same in terms of the generated assembly (they will behave the same) but consider:
int main()
{
int a = 1;
if (a)
if(a)
return 0;
}
And
int main()
{
int a = 1;
if(a)
return 0;
}
Compiling with no optimization -O0
main:
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], 1
cmp DWORD PTR [rbp-4], 0
je .L2
cmp DWORD PTR [rbp-4], 0
je .L2
mov eax, 0
jmp .L3
.L2:
mov eax, 0
.L3:
pop rbp
ret
main:
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], 1
cmp DWORD PTR [rbp-4], 0
je .L2
mov eax, 0
jmp .L3
.L2:
mov eax, 0
.L3:
pop rbp
ret
They are almost the same thing.
They are the same as a compiler would treat them exactly as they stand now.
However, they are not the same for development purposes. If additional code is inserted immediately after the end of the enclosed if statement, it will be grouped with that statement in the code with the braces around that if statement but not in the code without those braces. Issues like this are potential causes of bugs, so the difference may be significant.
If you write
if(...){
} else{
if(...){ ... }
}
That would be the same as
if (...) {
} else if (...) {
}
As long as you keep the else statement empty except for the second if statement.
else if isn't technically its own statement. else if is literally an else statement and then an if statement.