-3

我正在跳过头文件和 void main...
代码 1:-

int a = 5 , c ;
c = a++ + ++a + a++;
a = 5;
printf("%d %d",a++ + ++a + a++ , c);
___________________________________________________

输出:-
TCC:-(是的 Borlands 3.0 或任何被称为 DOS-blue 环境的版本)
19 18
19 = 如何?5+7+7 如果是(肯定与 GCC 输出相比),但为什么不是 18?

18 = 6+6+6?(c 赋值代码等价于
a++;
c=a+a+a;
a++;
a++;) 对吧?
为什么是 19 18 ?完全相同的代码有两个不同的值?
海湾合作委员会:-
19 19
19 都是 5+7+7 吗?说得通..

现在,代码 2:-

int a = 5 , c ;
c = ++a + ++a + ++a;
a = 5;
printf("%d %d",++a + ++a + ++a, c);
_________________________________________________

TCC:-
24 24
24 具有相同的逻辑 8+8+8(c 赋值代码等价于
a++;
a++;
a++;
c=a+a+a;
) 和 a = 8 ;

海湾合作委员会:-
22 22
22?如何 ?按正常逻辑 6 + 7 + 8 = 21 但输出 22 ?
然后 6+8+8 如果是的话怎么办?

4

1 回答 1

-1

不同的编译器以自己的方式执行表达式。编译器使用优化执行语句理想情况下,我们不应该比较编译器版本的行为,即 TCC、GCC、Borland c 等

根据优化技术,执行顺序可能会因编译器而异

参考答案:非常好的解释

从考试的角度来看,这类题我们应该遵循教科书的标准

于 2015-05-01T04:22:53.743 回答