如何解决这个结构赋值代码中的“xillybus_of_match[]”术语是什么意思?
这段代码取自一个关于 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 语言中是这样。
这样做的一个问题是,虽然声明符可以有多种形式,但它们都不匹配 xillybus_of_match[] __devinitdata
。这开辟了涉及预处理器宏和/或编译器扩展的各种可能性。
根据经验(因为它通常不会在早期的书籍、教程或课程中教授),这种形式用于提供编译器属性或其他语言扩展。 __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
被替换为什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。