是否存在else if语句?

dhe*_*ein 12 c if-statement language-lawyer semantics

前段时间没有站在这样的线路之后:

if (arg)
    invk(test);
else if (test)
{
    alot();
    stuff();
}
Run Code Online (Sandbox Code Playgroud)

我决定在1920x1200次中为自己提供更好的可读性,而不是省略{}.

所以我写了一个工具来重新格式化我现有的代码.

后来我注意到该工具中的一个错误

if (x)
{
 ...
}
else if(y)
{
 ...
}
else if(z)
{
 ...
}
Run Code Online (Sandbox Code Playgroud)

已被改变(不明显地改变行为)成:

if (x)
{
 ...
}
else 
{
    if(y)
    {
     ...
    }
    else
    {
        if(z)
        {
         ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这让我意识到(无意)这实际上是else if通过C的语法和语义规则做的事情.

那么,有没有甚至像一个陈述else if()现有或只是语义的滥用的结果在这个有用的,但(让我们称之为它,以便用于此目的)混淆起源措辞,打破任何格式化规则,只是作为人类可读?

Sou*_*osh 17

根据C11章节§6.8.4,选择语句,可用的语句块是

if ( expression ) statement
if ( expression ) statement else statement
switch ( expression ) statement
Run Code Online (Sandbox Code Playgroud)

而且,关于这else部分,

An elseif语法允许的词法最接近的前一个相关联.

因此,没有else if按照标准存在的构造C.

很显然,一个if(或if...else)块可以作为存在声明else块(嵌套if...else,我们可以说).

缩进的选择留给用户.


注意:

只是添加,没有理由else if存在单独的构造,可以通过嵌套来实现功能.请参阅此Wiki文章.相关报价

else ifC语言系列中以及在COBOL和Haskell中经常遇到的不是语言特性,而是一组嵌套且独立的"if then else"语句与特定的源代码布局相结合.但是,这也意味着else-if在这些语言中并不真正需要一个独特的结构.