如何解决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 (...) {
}
第二个if
是else
下面的单个语句,因此我们可以不用{}
编写它。
要解决建议绘制图形真值表的注释,逻辑上等效的程序就生成的程序集而言并不总是相同的(它们的行为相同),但请考虑:
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
,
它们几乎一样。
它们与编译器将它们按现在的样子对待一样。
但是,出于开发目的,它们并不相同。如果在封闭的if
语句结尾之后立即插入其他代码,则它将与该语句在代码中分组在一起,并在该if
语句周围带有花括号,但在没有这些花括号的代码中则不会。诸如此类的问题可能是导致错误的原因,因此差异可能很大。
如果你写
if(...){
} else{
if(...){ ... }
}
那将与
相同if (...) {
} else if (...) {
}
只要您保留else
语句为空(第二个if语句除外)即可。
else if
从技术上来说并不是它自己的声明。 else if实际上是一个else语句,然后是一个if语句。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。