【发布时间】:2012-06-29 18:21:40
【问题描述】:
可能重复:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)
#include<stdio.h>
void main()
{
int a=5;
printf("%d\t%d\t%d\n",a,a++,++a);
}
上述程序的输出在 gcc 版本 4.4.3 (Ubuntu 4.4.3-4ubuntu5) 中显示 7 6 7。为什么它显示而不是 7 6 6 ?
【问题讨论】:
-
程序的行为未定义,因为
main()的返回类型必须是int。 -
@JamesMcNellis:这不是唯一未定义的行为。
-
见 [
Undefined Behavior and Sequence Points][1] [1]: stackoverflow.com/questions/4176328/… -
@JonathanLeffler:我知道,但是对于这个问题,我也知道至少有六个人会回答它或提供其他类似问题的链接:-)
-
@JonathanLeffler:这不是 UB。 Moderns 编译器默认将
void main()转换为int main()。此外,main 函数的返回值不会影响程序本身的执行。
标签: c gcc undefined-behavior