mardi 10 avril 2018

Is "if ... else if ... else ..." any different from "if ... else { if ... else ...}" semantically?

I believe all of you, when learning C, have learned this syntax:

if (condition 1) {
    statements
} else if (condition 2) {
    statements
} ...
else {
    statements
}

But after reading N1570, § 6.8.4.1 The if statement, I find absolutely nothing talking about the chained else if statements, unlike other languages that provide keywords like ElseIf or elif for this purpose.

According to my understanding, the whole if(...){...}else{...} is one single statement (the else clause may not be existent, which is irrelevant). So when it comes to parsing, as shown in below codes,

if (condition) {}
else
    one_statement;

if (condition) {}
else
    if (something else) {} else {}

The indented if statement in the second block is equivalent to the indented one_statement; in the first block, in terms of "a syntactic 'statement' unit".

Then, as C allows flexible spacing, any combination of an aggregate positive number of spaces, tabs and newlines are equivalent. So after re-spacing the above code, it turns into

if (condition) {
} else if (something else) {
} else {
}

Is my understanding correct?

Aucun commentaire:

Enregistrer un commentaire