关于Else If的实施问题

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)

}

我知道不同的语言和编译器可以以不同的方式实现它,但如果有人有关于特定语言(或编译器)的具体细节,我会有兴趣听到它们.

Oli*_*rth 8

在C中,至少else if不是一个单独的语言结构.正如你猜测的那样,它没有什么不同if (x) { ... } else { if (y) { ... } }.

在某些语言中(可能是Python就是其中之一),语法/空白规则不允许解析器else if正确解释,因此elif(或等效)构造.


caf*_*caf 5

在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"或任何其他类似构造的处理方式不同.