回复 16楼 ehszt
我用DEV,b==10,a==4.和你的一样。。。
未定义行为,指的是C语言标准没有定义的。但是没说各家的编译器没有定义。
就好像下面这个程序
int fun(int n){
printf("%d ",n);
if(n==1)return 1;
if(n==2)return 1;
return fun(n-1)+fun(n-2);
}
按道理说没规定先执行fun(n-1)还是fun(n-2),但是在我的的环境下他就是先递归执行了fun(n-1),然后返回上一层,再执行fun(n-2),并没有出现过不规律的现象。
return fun(n-1)+fun(n-2);
和 int temp=fun(n-1);temp+=fun(n-2);return temp;
输出的结果一样。 但是就是没有规定说加号左边的式子必须先执行。而后者则是可以确信不管在什么环境下,他都是先执行fun(n-1)后执行fun(n-2)的。
------------------------------------
在我看来,之所以不规定加号左右两边的式子哪个先执行就是为了让程序能够被多线程并行处理。而我们这些初学者所使用的编译器真的会生成一个多线程的exe吗?恐怕不能吧,我估摸着大多是单线程的。
[此贴子已经被作者于2016-10-5 16:37编辑过]