2006年2月17日星期五

不同的编译器对i++和++i的处理会不同?


下面一段C语言代码,谁有Turbo C 2.0的帮忙编译一下,看看运行结果是什么?

 

#include<stdio.h>

int main(void)
{
int i = 3, j = 3, k = 0;
int m = 3, n = 0, l = 3;
int a = 5, b = 5;

k = (j++) * (++j) + (j--) * (--j);
n = (l++) + (l++) + (l++);
printf("k = %d (i++) * (++i) + (i--) * (--i) = %d (m++) + (m++) + (m++) = %d n = %d\n",
k, (i++) * (++i) + (i--) * (--i), (m++) + (m++) + (m++), n);
a = (a--) + 3;
printf("a = %d b = %d (b = (b--) + 3) = %d b = %d",
a , b, (b = (b--) + 3), b);
}



我用Dev-C++(gcc3.4-win32)编译的结果是:
k = 25  (i++) * (++i) + (i--) * (--i) = 25  (m++) + (m++) + (m++) = 9 n = 9
a = 7 b = 7 (b = (b--) + 3) = 8 b = 5


而我看到的TC的答案是这样的:
k = 18  (i++) * (++i) + (i--) * (--i) = 30  (m++) + (m++) + (m++) = 12  n = 9
a = 7 b = 8 (b = (b--) + 3) = 8 b = 5

帮忙验证一下。谢谢。最好再解释一下原理。 :)

没有评论:

发表评论