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测试
一个像宏的定义
INC(X++)
Run Code Online (Sandbox Code Playgroud)
和...一样
X++++
Run Code Online (Sandbox Code Playgroud)
这是(根据贪婪的编译器规则)(X++)++
.
请记住,#define
MACRO不是函数调用,而是它们是在预处理阶段发生的文本替换,因此,实质上,您的代码看起来像(5++)++
无效,因为增量/去除运算符可以用于变量[ lvalue
],而不是值本身(非左值).
注意:您可以递增值由一个变量中.您无法自己增加值.在这里,X
不是变量.作为MACRO扩展的一部分,它5
在预处理时间被替换.
总之,你不能这样做5++
,它像增量5
通过1
并存入5
.