为什么以下代码报告左值所需的错误?我们如何编写一个接收数组的宏和数组中元素的数量作为参数,然后打印出数组的元素?
#define arr(b) printf("%d",b++);\
printf("%d",b);
int main()
{
arr(5);
}
答案 0 :(得分:4)
如果展开宏,则会得到以下内容:
int main()
{
printf("%d",5++);
printf("%d",5);
}
您无法后续增加常量5
,因此会出现错误。
请记住,宏不是函数。如果你想让它像一个函数一样,只需创建一个函数:
void arr(int b) {
printf("%d",b++);
printf("%d",b);
}
答案 1 :(得分:1)
因为该宏的一部分扩展为5++
,这是无效的C.请考虑使用b+1
而不是b++
。
答案 2 :(得分:1)
左值中的第一个 l 代表左侧。
只能分配左值。
当你写x ++
时,你的意思是x = x + 1
(你也从中得到一个值)。
所以问题是写5 = 5 + 1
也许你想这样做:
int x = 5;
arr(x);