一段很很简单的代码
#include <stdio.h>
int main()
{
int i=2;
printf("%d,%d\n",i++,i++);
i=2;
printf("%d,%d\n",i++,++i);
i=2;
printf("%d,%d\n",++i,i++);
i=2;
printf("%d,%d\n",++i,++i);
return 0;
}
VC6.0结果是:
2,2
3,3
3,2
4,3
GCC的结果是:
3,2
3,4
4,2
4,4
第一组2,2和3,2的区别是,VC6.0是在执行printf之后再执行两个i++,而GCC是在输出后面的i,之后,立刻执行了i++,所以反应到了第一参数的输出就是3,这个可以理解
第二组3,3和3,4,这个,由于printf的参数顺序是从右往左,GCC输出的结果,后面的值比前面的要大,不太理解(PS: 如果说printf在GCC参数顺序是从左往右,那第一组结果应该是2,3,而不是3,2,所以这又自相矛盾了)
第三组3,2和4,2,这个值的差别和第一组的情况类似,先执行printf和先执行i++的区别
第四组4,3和4,4,这个后面那个i的输出怎么为4,看情况,冒似和第二组的原因差不多
gcc版本:gcc version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)
哪位大大解释一下呢 |