【发布时间】:2014-09-16 09:51:46
【问题描述】:
以下异常有什么原因吗?
考虑以下 C 程序(名为 PstFixInc.c)
#include <stdio.h>
int main (int argc, char *argv [])
{
int num = 0;
num = (num++) % 4;
printf ("num: %d\n",num);
return 0;
}
如果用gcc 4.8.1编译:
gcc -o PstFix.exe PstFixInc.c
然后执行,得到结果:
数量:0
如果使用 Microsoft (R) C/C++ Optimizing Compiler Version 18.00.21005.1 for x86 编译
cl PstFixInc.c
然后执行,得到结果:
数量:1
【问题讨论】:
-
它取决于编译器!
-
num = (num++) % 4;具有未定义的行为。见stackoverflow.com/a/4176333/12711 -
这个问题经常被问到——查看“序列点”以获取更多信息。基本上,不,两个编译器都是正确的,是的,你的代码坏了。
标签: c gcc visual-studio-2013 undefined-behavior sequence-points