我相信你们所有人在学习C时都学会了这种语法:
if (condition 1) {
statements
} else if (condition 2) {
statements
} ...
else {
statements
}
但在阅读N1570, § 6.8.4.1 The if
statement之后,我发现绝对没有谈论链式else if
语句,这与为此目的提供ElseIf
或elif
等关键字的其他语言不同。 / p>
根据我的理解,整个if(...){...}else{...}
是一个单一的陈述(else
条款可能不存在,这是无关紧要的)。因此,在解析时,如下面的代码所示,
if (condition) {}
else
one_statement;
if (condition) {}
else
if (something else) {} else {}
第二个块中的缩进if
语句等同于第一个块中的缩进one_statement;
,就“一个语法'语句'单元而言”。
然后,由于C允许灵活的间距,因此聚合正数空格,制表符和换行符的任意组合都是等效的。因此,在重新分隔上面的代码之后,它变成了
if (condition) {
} else if (something else) {
} else {
}
我的理解是否正确?
答案 0 :(得分:2)
我发现绝对没有谈论链接的其他if语句
那是因为关于链接if
语句没有什么特别之处,而不是链接,例如if
和循环。链接到else
子句末尾的任何内容都成为该else
子句的一部分:
if (x)
...
else if (y)
...
else if (z)
...
else
...
上面,if (y)
属于else
的{{1}}分支,以及其分支中的整个语句链。空白无关紧要,因此可以按照您在问题底部显示的方式对链进行重新格式化。
注意: C必须处理dangling else的特殊情况,但它会在if (x)
嵌套时发生,而不是在链接时发生。