此结构分配代码中的 "xillybus_of_match[]" 术语表示什么?

What does "xillybus_of_match[]" term in this struct assignment code signify?

此代码块取自 linux 内核设备驱动程序教程,我不确定如何解释它。我只询问 C 语法。根据我对 C 语法结构的理解,遵循以下约定 ...

struct Books {
   char  title[50];
   char  author[50];
   char  subject[100];
   int   book_id;
};
struct Books Book1;  

不过好像在“xillybus_of_match[]”下面多了一个词。这个术语在C语言中是什么意思?

static struct of_device_id xillybus_of_match[] __devinitdata = {
  { .compatible = "xlnx,xillybus-1.00.a", },
  {}
};

MODULE_DEVICE_TABLE(of, xillybus_of_match);

谢谢!

以“static struct tag-name”开头的声明的一般形式是“static struct tag-name declarator = initializer [可选更多逗号分隔的声明符和初始化符…]”,至少在基础 C 语言中是这样由标准定义。

一个问题是,尽管声明符可以有多种形式,但其中 none 匹配 xillybus_of_match[] __devinitdata。这开辟了涉及预处理器宏的各种可能性 and/or 编译器扩展。

根据经验(因为在早期的书籍、教程或类中一般不会教授),这种形式用于提供编译器属性或其他语言扩展。 __devinitdata可以是一个宏,根据不同的情况,例如开始针对哪个计算平台或者选择哪些特征来构建,以各种方式定义。可以用空白代替。在任何情况下,效果很可能声明等同于 static struct of_device_id xillybus_of_match[] = { *initial values* };,可能还有一些由 __devinitdata.

添加的额外信息

如果是,则 xillybus_of_match 被声明为一个数组,其元素数量由初始值设定项确定,其元素类型为 struct of_device_id。该声明还定义了数组并使用初始化程序对其进行了初始化。

使用常用开关编译代码,但使用 GCC 或 Clang,添加 -E 并删除其他影响输出的开关(例如 -o-S)将产生预处理的结果,让您可以看到 __devinitdata 被替换成了什么。