C:为什么不能在同一个表达式中增加/减少变量两次?

时间:2017-08-20 19:46:02

标签: c compiler-errors

当我尝试编译此代码时

int main() {
    int i = 0;
    ++(++i);
}

我收到此错误消息。

test.c:3:5: error: lvalue required as increment operand
     ++(++i);
     ^

错误信息是什么?这是解析器拾取的东西,还是仅在语义分析期间发现?

3 个答案:

答案 0 :(得分:4)

评估后,

++i将给出右值 1 ,并且您无法在右值上应用++

§6.5.3.1(p1):

  

前缀增量或减量运算符的操作数应具有原子,限定或非限定的实数或指针类型,应为可修改的左值

<子> 1。有时被称为“rvalue”的内容在本国际标准中被描述为“表达的价值”。 - §6.3.2.1脚注64)。

答案 1 :(得分:2)

左值是您可以写入/分配给的值。

您可以将mod Foo { use std::fs::File; use std::io::Read; struct Css {} impl Css { pub fn save_result_to_file(file_to_save: String) { println!("Saving output to {}", file_to_save); let mut f = File::open(file_to_save).expect("Unable to open file"); } } } 应用于++i已修改)但您无法将i应用于上一个++运算符的结果。反正我不会有任何影响。

除此之外:C ++允许这样做(可能是因为++运算符在修改后的值上返回非const引用)

答案 2 :(得分:2)

(++ i)返回新整数值的问题,请注意++操作需要一些变量用于赋值,而不是值(你试图增加整数而不是变量),所以你可以使用这个相反:

i += 2; 

i = i + 2;