我在include / linux / wait.h
中找到了这个神秘的构造 #define DEFINE_WAIT_FUNC(name, function) \
wait_queue_t name = { \
.private = current, \
.func = function, \
.task_list = LIST_HEAD_INIT((name).task_list), \
}
我对macros和preproc指令一般都知道很多,但我绝对迷失在这一点上。有人可以详细解释上面的代码 结构 ,包括行尾的'\'。感谢。
注意:我不需要知道它在linux中的作用,只需要知道它背后的语法含义。
答案 0 :(得分:2)
宏中的\
字符是行继续符。它只是允许宏跨越多行。
答案 1 :(得分:1)
宏(可能)是使用函数指针进行结构定位并进行常规初始化。不要说你想将这些结构添加到列表中,然后(在执行步骤中)调用不同的函数。 一个更好的问题至少包括wait_queue_t定义。
答案 2 :(得分:1)
与其他人(and many references on-line)一样,\
字符通过c-preprocessor继续任何行。至于其余的,
#define DEFINE_WAIT_FUNC(名称,功能)\
宏的定义。
wait_queue_t name = { \
使用宏替换 name 声明wait_queue_t
。
.private = current, \
使用private
任务指针初始化current
wait_queue_t结构成员。这也是Linux树中每个体系结构定义的宏(可能是内联汇编程序)。
.func = function, \
将func
成员设置为 function 参数。
.task_list = LIST_HEAD_INIT((name).task_list), \
将列表初始化为空。 task_list
指向自己。
.
表示法用于整个内核源代码,并且是 gcc 功能(以及后来的C99),称为designated intializers。而不必设置结构的所有成员,只初始化命名的成员,其他成员设置为零。这允许人们在不修改所有声明的情况下扩展结构。它不是 c-preprocessor 功能,而是一个' C'语言(扩展名)。