如何Lvalue需要错误

mri*_*dra 5 c lvalue

有一段代码产生了"Lvalue required"的错误.代码是,

     #include<stdio.h>
     #include<conio.h>
     #define max 10
     int main()
     {
      printf("%d",max++);
      return 0;
     }
Run Code Online (Sandbox Code Playgroud)

很明显,Lvalue错误将出现在上面的代码中,所以我将代码更改为

     int a;
     printf("%d",a=max++); 
Run Code Online (Sandbox Code Playgroud)

我想现在常量的值被分配给一个合适的变量,但仍然出现错误.然后我检查了

     printf("%d",a=max+1);
Run Code Online (Sandbox Code Playgroud)

它没有任何错误.第二段代码有什么问题?

Bat*_*eba 5

max是文字,所以max++会失败.(就像10++失败一样).

但是,max + 1有效(就像10 + 1).

请记住,#defines由预处理器解决,它编译发生之前发生.

解释编译器的返回错误:

松散地说,lValue是作业左侧的东西; 即在...

a = b;
Run Code Online (Sandbox Code Playgroud)

a是lValue.该陈述10 = b;显然毫无意义(您不能将值赋值为10):更正式地说它是无效的,因为10不是lValue.


P0W*_*P0W 2

max预处理后会被替换为10,所以

max++ => 10++      //Error  ++ requires lvalue
a=max++ => a=10++  //Error  same as above

a=max+1 => a=10+1 //Works
Run Code Online (Sandbox Code Playgroud)

  • ++ 是一个赋值。同样‘10 = 10 + 1’是非法的,‘10++’也是非法的。 (2认同)