C编程一元运算符优先级

时间:2015-04-14 16:31:19

标签: c++ c

   #include <stdio.h>

   int main()
    {
     int c=10,b;
     b=++c+++c;
     printf("%d",b);
     return 0;
    }

有人可以告诉我,为什么会出现编译错误?

2 个答案:

答案 0 :(得分:3)

胡言乱语被标记为

++ c ++ + c

并解析为

((++c)++) + c

这会尝试增加由++c产生的 rvalue ,这是不允许的。您只能递增左值(或类型,在C ++中)。

即使允许这样做,也会产生未定义的行为:您将进行无序修改并使用c的值。

答案 1 :(得分:0)

如果在++c + ++c

中添加空格,则会解决编译错误
b = ++c + ++c;

但这只是修复了编译错误。你正在做的是未定义的行为。尝试使用c在同一表达式中多次更改++的值将导致未定义的行为。

阅读Why are these constructs (using ++) undefined behavior?