Jos*_*ton 3 .net c java language-agnostic if-statement
我之前想知道else的实现,特别是为什么需要两个关键字,以及关键字没有加入的原因.但是在python中,如果使用控制流语句,则将elif用作else.我想知道一般编译器如何解释其他如果.
编译器是否将else作为单个标记处理?或者,如果只是一个带有隐式块范围的else转移到if下面?
单令牌:
if (some_condition) {
some_statement();
}
else_if (some_other_condition) {
other_statement();
}
else {
default_statement();
}
Run Code Online (Sandbox Code Playgroud)
或者其他如果:
if (some_condition) {
some_statement();
}
else { // compiler generated block scope
if (some_other_condition) {
other_statement();
}
else {
default_statement();
}
Run Code Online (Sandbox Code Playgroud)
}
我知道不同的语言和编译器可以以不同的方式实现它,但如果有人有关于特定语言(或编译器)的具体细节,我会有兴趣听到它们.
在C中,至少else if不是一个单独的语言结构.正如你猜测的那样,它没有什么不同if (x) { ... } else { if (y) { ... } }.
在某些语言中(可能是Python就是其中之一),语法/空白规则不允许解析器else if正确解释,因此elif(或等效)构造.
在C语言中,if语句的语法很简单:
if (expression) statement [else statement]
Run Code Online (Sandbox Code Playgroud)
一个语句可以是一个块语句,它看起来像:
{ statement-list }
Run Code Online (Sandbox Code Playgroud)
但它不一定是.因此,在"else if"的情况下,它只是一个else关键字,后面跟着一个语句,而该语句恰好是一个if语句.
从概念上讲,它与此相同:
if (x == 0) {
return;
} else while (x > 0) {
foo(x--);
}
Run Code Online (Sandbox Code Playgroud)
"else if"与"else while"或任何其他类似构造的处理方式不同.