borland turbo C++ 中奇怪的运算符优先级和赋值行为

weird operator precedence and assignment behavior in borland turboC++

我必须在大学里使用 borland TurboC++ 进行 C 编程他们说我们的考试委员会推荐它。我使用它。

问题是他们给了这个运算符优先级相关的问题:

int a=10,b=20,result;
result1 = ++a + b-- - a++ * b++ + a * ++b;
printf("result=%d",);
printf("\n a=%d",a);
printf("\n b=%d",b);

其他编译器如gcc无法执行此操作。但是 turbo C 可以并且给我们:

result=32 a=12 b=21

我测试有误。我的老师试图解释发生了什么。但我不相信。它是 turbo C 的某种奇怪行为,还是在过去它对所有编译器都完全没问题。如果是这样,了解发生了什么以及如何理解的步骤是什么。

为了解决这类问题,turbo-c 的处理方式如下:

1) 考虑使用变量的初值

a=10
b=20

2) 计算每个变量的所有预递增和递减,并将每个变量的所有 post 单独存储在堆栈中。

对于变量 a

pre increment = 1 therefore change the value of a to 11
post = 1 stored to stack

对于变量 b

pre increment = 1 therefore change the value of b to 21
post = 2 stored to stack

3) 现在将所有的pre和post替换为a和b的当前值

result = 11 + 21 - 11 * 21 + 11 * 21 ;
result = 11 + 21;
result = 32;

4) 最后出栈,对变量进行操作

a = 12
b = 21

这是解决这个问题的唯一方法。您可以用任何同类问题检查程序。结果会一样。 g++ 无法解决,因为它可能无法以相同的方式解决变量,因此出现了优先级错误。它可能会因 ++ + 和 -- - 而失败,因为它无法理解递增或递减运算符并形成歧义树。