C中的表达评估

时间:2011-07-14 09:07:10

标签: c operators associative

#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)

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

请有人澄清这一点。

3 个答案:

答案 0 :(得分:9)

C词法标记器是贪婪的,所以你的表达式被标记为

x -- - y

在应用优先规则之前。

答案 1 :(得分:4)

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

答案 2 :(得分:-1)

x--强于--x,所以它是以这种方式编译的。 Postfix强于前缀。

请参阅C Operator Precedence Table