gpt4 book ai didi

c - 在宏定义中使用成员名称

转载 作者:行者123 更新时间:2023-11-30 16:12:17 25 4
gpt4 key购买 nike

我正在开发一个使用 linux/list.h 作为 header 之一的用户空间应用程序。但是,当我在自己的应用程序中使用 list.h 中的宏定义“list_for_each_entry”时,我遇到了问题:

#define list_for_each_entry(pos, head, member)              \
for (pos = list_first_entry(head, typeof(*pos), member); \
&pos->member != (head); \
pos = list_next_entry(pos, member))

static void *slob_alloc(size_t size){
struct slob_page *sp;
struct list_head *slob_list;

list_for_each_entry(sp, slob_list, list) { //The location where error is reported.
//Something else ...
}
}

slob_page的定义如下:

struct slob_page {
union {
struct {
slob_t *free;
struct list_head list; /* the member accessed by that macro expansion */
};
struct page page;
};

};

编译器抛出错误“错误:使用未声明的标识符‘list’;”。似乎无法将 list 识别为成员名称。

我该如何解决这个问题?

最佳答案

因为编译器不知道您在结构中使用的成员是什么。您需要像这样指向您的成员(member):

"sp->"union data"->list

关于c - 在宏定义中使用成员名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58366603/

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