2
#include <stdio>
int main(){      

       int x = 4;  
       int y = 3;  
       int z;

       z = x---y;
       printf("%d" , z);
       return 0;
}

Linux Mandriva 中的 gcc 编译器将其评估为(x--)-y. 我很困惑为什么会这样。本来可以的x - (--y)

我知道一些答案会告诉我查看优先表。我已经经历了所有这些,但仍然存在疑问。

请任何人澄清这一点。

4

3 回答 3

9

C 词法标记器是贪婪的,因此您的表达式被标记为

x -- - y

在应用优先规则之前。

于 2011-07-14T09:09:43.197 回答
4

规则是“在获取下一个令牌时,使用可能构成有效令牌的最长字符序列”。所以后面是a ---,而不是相反。优先级实际上与此无关。---

于 2011-07-14T09:11:27.317 回答
-1

x--比 强--x,所以这样编译。后缀比前缀强。

请参阅C 运算符优先级表

于 2011-07-14T09:11:45.413 回答