【发布时间】:2013-10-29 00:05:16
【问题描述】:
我正在尝试使用 Linux Kernel Linked List 实现,但无法编译。我完全按照这些来源没有结果(http://www.roman10.net/linux-kernel-programminglinked-list/ 和 http://kernelnewbies.org/FAQ/LinkedLists)
LIST_HEAD_INIT 的 list.h 内核宏如下:
#define LIST_HEAD_INIT(name) { &(name), &(name) }
struct Node {
int data;
struct list_head list;
};
struct Node mylinkedlist;
LIST_HEAD_INIT(&mylinkedlist.list);
void add(){
struct Node first;
first.data = 1;
first.list = LIST_HEAD_INIT(first.list);
list_add_tail(&first->list, &mylinkedlist.list);
return 0;
}
我不断得到: “错误:预期的标识符或‘{’之前的‘(’”
【问题讨论】:
-
我对可能发生的事情有所怀疑。我们可以看看
LIST_HEAD_INIT是在哪里定义的吗? -
它定义在函数 add() 的正上方。 LIST_HEAD_INIT(&mylinkedlist.list)。我的印象是它是 list.h 中的一个宏,对吗?
-
可能。我想看到的是宏(不是使用它的地方)。
-
哦,好吧。 @DennisMeng:#define LIST_HEAD_INIT(name) { &(name), &(name) }
-
@Alex 在问题描述中尽可能。
标签: c linux macros linked-list kernel