C 如何声明包含链表的结构变量?
在我的C 如何声明包含链表的结构变量?,c,struct,linked-list,linux-kernel,C,Struct,Linked List,Linux Kernel,在我的.h文件中,我有: #include <linux/list.h> struct myNode { struct list_head list; int myID; int myBadge; }; extern struct myNode firstNode; 但是当我编译时,我得到了一个错误: expected declaration specifiers '...' before '&' token INIT_LIST_HEAD(&
.h
文件中,我有:
#include <linux/list.h>
struct myNode
{
struct list_head list;
int myID;
int myBadge;
};
extern struct myNode firstNode;
但是当我编译时,我得到了一个错误:
expected declaration specifiers '...' before '&' token INIT_LIST_HEAD(&firstNode.list);
我不太熟悉错误的实际含义(对不起,我对C不太熟悉),所以我不确定为什么/这意味着什么;此处只能使用声明和定义 对于定义
firstNode
全局变量并初始化其中的列表,请使用list\u HEAD\u INIT
宏:
#include "test.h"
struct myNode firstNode =
{
.list = LIST_HEAD_INIT(list);
}
我们需要您提供更多的代码以提供帮助。您是否包含了
list.h
标题?问题似乎是在您尝试使用它时,INIT\u list\u HEAD
的定义不在范围内。不知道您为什么被否决。但是,不要使用Linux内核头,内核代码除外。它们不用于支持用户空间程序。请不要破坏您的帖子。如果您认为您的问题没有用处或不再有用,则应将其删除,而不是编辑掉所有使其成为问题的数据。通过在Stack Exchange网络上发布,您已授予SE分发该内容的不可撤销权利(根据CC By-SA 3.0许可证)。根据SE策略,任何破坏行为都将恢复。实际上,宏可以扮演不同的角色之一LIST\u HEAD
是一个定义宏-使用它可以定义列表类型的变量LIST\u HEAD\u INIT
是一个初始化宏-它可以用作变量初始化语句的右手。可以将INIT_LIST_HEAD视为函数宏-它执行一些操作,不返回值。因此,它只能用作可执行代码。您引用的标题定义了一个函数宏:它执行一些操作,不返回值。构造do{…},而(0)
通常用于在Linux内核中定义此类宏。请注意,LIST\u HEAD\u INIT
宏定义使用了{a,b}
结构,可以使用适当类型的字段将其分配给结构变量。
#include "test.h"
struct myNode firstNode =
{
.list = LIST_HEAD_INIT(list);
}