宏初始化不明确

时间:2011-03-10 18:55:24

标签: c macros linux-kernel

我不清楚以下代码

struct nsproxy init_nsproxy = INIT_NSPROXY(init_nsproxy);

这可以在这里看到 http://lxr.free-electrons.com/source/kernel/nsproxy.c?v=2.6.28#L27

我无法理解在这里使用宏INIT_NSPROXY http://lxr.free-electrons.com/source/include/linux/init_task.h?v=2.6.28#L53

宏被定义为使用INIT_NSPROXY(nsproxy),但是当上面的代码片段正在初始化时,它正在使用INIT_NSPROXY(init_nsproxy),那怎么可能呢?

2 个答案:

答案 0 :(得分:1)

#define INIT_NSPROXY(nsproxy) // etc.

在此宏定义中,nsproxy是宏参数的名称。

在宏替换列表(#define INIT_NSPROXY(nsproxy)部分之后的所有内容中),nsproxy标记出现的任何地方,它都会被传递的参数替换。

在这种情况下,正在传递参数init_nsproxy

答案 1 :(得分:0)

在这种形式中,您可以将宏视为函数调用。 函数的名称是INIT_NSPROXY,参数的名称是nsproxy。 在INIT_NSPROXY宏内部,nsproxy被传递给它的任何标识符替换。