else ... if在C中的语句是否等于else {if}?

问题描述

我的问题:

这是

if (...) {
  
} else if (...) {
  
}

等于吗?

if (...) {
  
} else {
  if (...) {
    
  }
}

的确,我想这两种情况的结果是相同的,但是如果不是C中的另一条语句,则是其他结果。

解决方法

if (...) {
  
} else if (...) {
  
}

相同
if (...) {
  
} else {
  if (...) {
    
  }
}

但是

if (...) {
  
} else if (...) {
  
}

不同
if (...) {
  
} else {
   ... // extra statements
  if (...) {
    
  }
}
,

C语言没有称为else if的功能。那只能通过编码方式获得。您的示例与此等效:100%

if (...) {
  
} 
else 
  if (...) {
  
  }

第二个ifelse下面的单个语句,因此我们可以不用{}编写它。

,

要解决建议绘制图形真值表的注释,逻辑上等效的程序就生成的程序集而言并不总是相同的(它们的行为相同),但请考虑:

int main()
{ 
    int a = 1;
    if (a)
       if(a)
          return 0;
}

int main()
{ 
    int a = 1;
    if(a)
      return 0;
}

未经优化-O0

进行编译
main:
        push    rbp
        mov     rbp,rsp
        mov     DWORD PTR [rbp-4],1
        cmp     DWORD PTR [rbp-4],0
        je      .L2
        cmp     DWORD PTR [rbp-4],0
        je      .L2
        mov     eax,0
        jmp     .L3
.L2:
        mov     eax,0
.L3:
        pop     rbp
        ret

main:
        push    rbp
        mov     rbp,0
.L3:
        pop     rbp
        ret

https://godbolt.org/z/4ajevq

,

它们几乎一样。

它们与编译器将它们按现在的样子对待一样。

但是,出于开发目的,它们并不相同。如果在封闭的if语句结尾之后立即插入其他代码,则它将与该语句在代码中分组在一起,并在该if语句周围带有花括号,但在没有这些花括号的代码中则不会。诸如此类的问题可能是导致错误的原因,因此差异可能很大。

,

如果你写

    if(...){
    } else{ 
        if(...){ ... }
    }

那将与

相同
if (...) {
  
} else if (...) {
  
}

只要您保留else语句为空(第二个if语句除外)即可。

else if从技术上来说并不是它自己的声明。 else if实际上是一个else语句,然后是一个if语句。