gpt4 book ai didi

c - 为什么我得到 expression must be a modifiable lvalue?

转载 作者:太空宇宙 更新时间:2023-11-04 00:47:31 24 4
gpt4 key购买 nike

考虑以下宏:

#define FOO(a,b) (--a)* 8 + (--b);

现在

int graph[8][8] = { 0 };
int *graph_p = &(graph[0][0]);
int *p = graph_p + FOO(2, 3);

为什么会出现错误:

IntelliSense: expression must be a modifiable lvalue

最佳答案

这是因为您将一个整数常量传递给类函数宏FOO(a, b),它应用预增量-- 对其参数的运算符。

这个宏扩展的结果如下:

int *p = graph_p + (--2)* 8 + (--3);;

这在 C 中是非法的,因为运算符需要一个可修改的左值 作为其操作数。

这里的另一个问题是,你应该在宏的替换周围加上括号,不要在末尾放置分号:

#define FOO(a,b) ((--a)* 8 + (--b))

关于c - 为什么我得到 expression must be a modifiable lvalue?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32011014/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com