C:错误C2105:'++'需要左值

use*_*236 1 c macros compiler-errors

Windows,MSVS 2010.

我无法理解为什么会产生编译错误:

#define INC(X) X++

int main() {

    int X; 
    printf("%d", INC(X++)); 

    return 0; 

}
Run Code Online (Sandbox Code Playgroud)

错误:

错误1错误C2105:'++'需要l值test.cpp 19 1测试

Mur*_*nik 9

扩展宏的结果是X++++.

后缀++运算符递增变量的值并在递增之前返回值.它不会返回左值(变量) - 只是一个值.你不能++像你不能打电话那样申请3++.


Sou*_*osh 5

一个像宏的定义

INC(X++)
Run Code Online (Sandbox Code Playgroud)

和...一样

X++++
Run Code Online (Sandbox Code Playgroud)

这是(根据贪婪的编译器规则)(X++)++.

请记住,#defineMACRO不是函数调用,而是它们是在预处理阶段发生的文本替换,因此,实质上,您的代码看起来像(5++)++无效,因为增量/去除运算符可以用于变量[ lvalue],而不是值本身(非左值).

注意:您可以递增由一个变量中.您无法自己增加值.在这里,X不是变量.作为MACRO扩展的一部分,它5在预处理时间被替换.

总之,你不能这样做5++,它像增量5通过1并存入5.