有一段代码产生了"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)
它没有任何错误.第二段代码有什么问题?
max是文字,所以max++会失败.(就像10++失败一样).
但是,max + 1有效(就像10 + 1).
请记住,#defines由预处理器解决,它在编译发生之前发生.
解释编译器的返回错误:
松散地说,lValue是作业左侧的东西; 即在...
a = b;
Run Code Online (Sandbox Code Playgroud)
a是lValue.该陈述10 = b;显然毫无意义(您不能将值赋值为10):更正式地说它是无效的,因为10不是lValue.
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)