Lvalue需要宏的错误

时间:2012-03-24 12:34:27

标签: c macros

为什么以下代码报告左值所需的错误?我们如何编写一个接收数组的宏和数组中元素的数量作为参数,然后打印出数组的元素?

#define arr(b) printf("%d",b++);\
               printf("%d",b);


int main()
{
    arr(5);
}

3 个答案:

答案 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);