Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何声明包含链表的结构变量?_C_Struct_Linked List_Linux Kernel - Fatal编程技术网

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);
}