我刚刚阅读了关于未定义行为和序列点的 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;
}
谢谢你的帮忙。