今天看到了一段令人头痛的代码,因为你完全不知道它的编译结果是什么。程序如下:
int main()
{
int i = 1,a;
a=(++i )+ (i++ )+(i++);
printf("%d\n",a);
return 0;
}
大致一看,这段代码没有错误,但大家知道编译结果是什么吗。有人会说8吗,有人会说’10吗,哈哈其实都不对,我也不知道是什么。因为它在不同的编译器上有不同的结果。
这种代码存在一个计算的顺序问题,计算a的路径有很多,而不同的编译器会根据自己本身的语言习惯来选择不同的路径计算它的值,这就造成了代码的混乱问题,没有人能正确或者错误的评价这个代码。
在以后的学习中,尽量不要写出这种意义不明确的代码,会给别人和计算机造成不必要的麻烦。