为什么会出现编译错误(第3行需要左值)
什么是正确的代码,然后是输出?
#include<iostream>
#define PRINT(i,LIMIT) \
do{ if(i++<LIMIT)\
{ cout<<"Gradeup";\
continue; }\
}\
while(1)
using namespace std;
int main() {
PRINT(0,3);
return 0;
}
答案 0 :(得分:1)
展开宏后,if(i++<LIMIT)
变为if (0++ < 3)
而0++
不是有效的表达式。
要使其正常工作,您可以在main()
中定义一个变量,并将该变量传递给宏:
int main()
{
int a = 0;
PRINT(a, 3);
return 0;
}
注意,您定义的宏实际上是一个无限循环(至少对于给定的参数)。如果您打算打印三次,则需要
#define PRINT(i, LIMIT) \
do { \
cout<<"Gradeup";\
}while(++i<LIMIT)
答案 1 :(得分:0)
请注意,宏中定义的任何标识符都不是变量。它是一个替代标识符&#34;。所以你没有一个名为i
的变量,但提供给那里的任何东西。
然后你的宏像这样展开
PRINT(0, 3);
// Expand result
do{ if(0++<3)
...
编译器肯定抱怨0++
不是有效的表达式。 0是 Rvalue ,因此不能与增量运算符一起使用(需要左值)。