[bo]以下是引用 [un]DoNO1[/un] 在 2008-4-14 08:58 的发言:[/bo]
昨天我在VC++和.net的编译器上做了同样的程序,可是结果确不一样。
#include
int main(void)
{
int i=1;
printf("%4d%4d",++i,++i);
}
在VC++中的结果是3,2;在.net中的结果是3,3;
在VC++我还能理解是怎么算出 ...
C语言中类似上述问题还有一些.例如,在调用函数时,实参的求值顺序,C标准并没有统一规定.如i的初试值为1,如果有下面的函数调用:
printf("%d,%d",++i,++i);在有的系统中从左到右计算,输出"2,3" .在多数系统中对函数的求值顺序是自右到左,上面的printf函数中要输出
两个表达试的值(++i和++i),先求出第2个表达试++i的值2(i自加后的值),然后求第1个表达试的值,由于在求第2个表达试前执行了i自加,使i的值变为2,
因此printf函数中第一个参数++i的值为3,所以上面的printf函数输出结果是"3,2".而还有的系统是先将i自加两次然后再输出i的值,故输出"3,3".
总之,不要写出别人看不懂的,也不知道系统会怎么执行的程序.
在看别人的程序时,应该考虑到类似上述问题在不同的系统处理的方法不尽相同.
应该知道使用C语言时可能出问题的地方,以免遇到问题时不知其所以然在论坛上大呼小叫.
使用++和--时常会出现一些人们"想不到"的副作用,初学者应该慎用.