hal*_*lex 7 c c++ gcc compiler-warnings sequence-points
我刚读了这篇关于未定义行为和序列点的SO C++ FAQ,并进行了一些实验.在下面的代码中gcc-4.5.2
,只在代码注释中提到的行中给出了警告,尽管之前的一行也显示了未定义的行为,不是吗?您不能说首先执行哪个加法操作数(因为+
没有序列点).为什么gcc也没有在这一行给我一个警告?
int i=0;
int j=0;
int foo(void) {
i=1;
return i;
}
int main(void) {
i = i + foo();
j = j + (j=1); //Here is a rightly warning
return 0;
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮忙.
小智 16
i = i + foo()的行为; 未指定但未定义.未定义意味着允许任何可能的行为,甚至中止程序.未指定意味着首先评估i,或者foo().是的,foo写到同一个i,但由于它发生在一个单独的语句中,所以在该商店之前和之后都有一个序列点.
归档时间: |
|
查看次数: |
1085 次 |
最近记录: |