C中的else…if语句等于else{if}吗?
我的问题: 这是:C中的else…if语句等于else{if}吗?,c,if-statement,C,If Statement,我的问题: 这是: if(…){ }否则如果(…){ } 等于这个吗 if (...) { } else { if (...) { } } 事实上,我猜在这两种情况下,结果是相同的,但如果在C中有一个不同的语句 if (...) { } else if (...) { } 与 if (...) { } else { if (...) { } } 但是 不同于 if (...) { } else { ... // e
if(…){
}否则如果(…){
}
等于这个吗
if (...) {
} else {
if (...) {
}
}
事实上,我猜在这两种情况下,结果是相同的,但如果在C中有一个不同的语句
if (...) {
} else if (...) {
}
与
if (...) {
} else {
if (...) {
}
}
但是 不同于
if (...) {
} else {
... // extra statements
if (...) {
}
}
C语言没有名为
的功能,如果
,则称为else。只有通过编码风格才能获得。您的示例100%等同于此:
if (...) {
}
else
if (...) {
}
如果第二个
if
是else
下面的一条语句,那么我们可以在不使用{}
的情况下编写它来处理建议绘制真值表的注释,逻辑上等价的程序在生成的程序集方面并不总是相同的(它们的行为将相同),但要考虑:
int main()
{
int a = 1;
if (a)
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
他们几乎是同一件事 它们与编译器对待它们的方式完全相同 然而,就发展目的而言,它们并不相同。如果在所附的
If
语句结束后立即插入了其他代码,则它将与代码中的该语句分组,并在该If
语句周围用大括号括起来,但不在没有大括号的代码中。像这样的问题是导致bug的潜在原因,因此差异可能很大。如果您编写
if(...){
} else{
if(...){ ... }
}
这与
if (...) {
} else if (...) {
}
只要将else
语句保持为空,第二条if语句除外
else如果
在技术上不是它自己的语句。else-if字面上是一个else语句,然后是一个if语句。完全一样。这是正确的。如果是它自己的实体,C就不会真正识别出else。它只是将其视为一个else
,其语句恰好是另一个if
。好的!那真是太快了。谢谢:)我喜欢画真相表来理解这些场景。为两个条件(四个排列)绘制真值表,并写入执行的代码块。然后比较这两个场景的结果。如果您使用更具可读性的缩进样式,它将变得更加明显。正因为如此,我们可以用来娱乐自己,或者:If
和类似的重要构造:)好答案唯一的例外是比较优化
main:
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-4], 1
cmp DWORD PTR [rbp-4], 0
je .L2
mov eax, 0
jmp .L3
.L2:
mov eax, 0
.L3:
pop rbp
ret
if(...){
} else{
if(...){ ... }
}
if (...) {
} else if (...) {
}