在我的.h文件中,我有:

#include <linux/list.h>
struct myNode
{
    struct list_head list;
    int myID;
    int myBadge;
};
extern struct myNode firstNode;


为了在.c文件中定义firstNode变量,我尝试了以下方法:

#include "test.h"
INIT_LIST_HEAD(&firstNode.list);


但是当我编译时,出现错误:

expected declaration specifiers '...' before '&' token INIT_LIST_HEAD(&firstNode.list);


我对错误的实际含义不太了解(对不起,我对C不太熟悉),所以我不确定为什么/这意味着什么。

最佳答案

如注释中所述,在全局范围内(即,在任何函数的主体之外),可执行代码都是禁止的;在此只能使用声明和定义。

要定义firstNode全局变量并在其中初始化列表,请使用LIST_HEAD_INIT宏:

#include "test.h"
struct myNode firstNode =
{
    .list = LIST_HEAD_INIT(list);
}

10-06 01:40