增量 wrt TCC , GCC

Increment wrt TCC , GCC

我正在跳过头文件和 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赋值代码等同于
一个++;
c=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赋值码等价于
一个++;
一个++;
一个++;
c=a+a+a;
) 和 a = 8 ;

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

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

执行顺序可能因编译器而异,具体取决于优化技术

参考答案:Very Nice Explaination

从考试的角度来看,这类题目我们应该按照课本标准来做