为什么我+++工作正常,但+++我给出错误?

时间:2014-07-23 18:41:46

标签: c operators post-increment pre-increment

我用C语言尝试了一些代码,但我遇到了这个问题。

int i=0;
i=i+++ ++i;   //works fine
//i=i++ +++i;   gives error

我的困惑是i+++如何运行?但+++i返回错误。

2 个答案:

答案 0 :(得分:5)

根据“最长匹配”规则解析C运算符。您的第一个示例被解析为:

i = i ++ + ++ i ;

i = (i++) + (++i);

而你的第二个例子被解析为:

i = i ++ ++ + i ;

i = ((i++)++) + i;

后增量运算符的结果是 rvalue ,它是增量变量的先前值的副本。将另一个后增量运算符应用于右值是一个错误,因为该运算符需要左值,直观地说,可以分配给i*p这样的表达式。< / p>

此外,此代码包含未定义的行为。您正在阅读i并在没有干预序列点的情况下对其进行修改 - ;&&||,或{ {1}} - 这意味着程序行为是不可预测的,并且会因编译器而异。

答案 1 :(得分:1)

这两个语句都会产生未定义的行为。但是,第一个正常工作的原因是因为您的编译器将其解释为(i++)+ ++i;,而第二行是i++ ++(+i),这没有任何意义。