#Define宏的结构

Structure of #define Macro

本文关键字:结构 #Define      更新时间:2023-10-16

我在内部发现了这个奥术构造/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),     
        }

我一般来说,我对宏和预杂项指令都非常了解,但我绝对迷失了这一点。有人可以详细说明以上代码 struction ,包括在行末尾的''。谢谢。

注意:我不需要知道它在Linux中的作用,只有其背后的句法含义。

宏中的 字符是线延续字符。它只允许宏跨越多行。

宏(大概)正在通过功能指针和执行共同初始化的结构来进行结构。唯一说您想将这些结构添加到列表中,然后(在执行步骤中)调用不同的功能。一个更好的问题至少包括wait_queue_t定义。

根据其他(以及许多参考文献),字符通过C-Prepropersors继续任何行。至于其余的,

#define define_wait_func(名称,函数)

宏的定义。

   wait_queue_t name = {                                            

用宏替换声明 wait_queue_t name

            .private        = current,                              

使用current任务指针初始化private Wait_queue_t结构成员。这也是Linux树中每个体系结构定义的宏(也许是内联汇编器)。

            .func           = function,                             

func成员设置为函数参数。

            .task_list      = LIST_HEAD_INIT((name).task_list),     

将列表初始化为空。 task_list指向自己。

.符号用于贯穿内核源,并且是 gcc 功能(以及后来的c99),称为指定的intializers 。不必设置结构的所有成员,而只有将命名的成员设置为零。这允许人们在不修改所有声明的情况下扩展结构。它不是 c-preprocessor 功能,而是'c'语言(扩展)。