【问题标题】:macro initialization not clear宏初始化不清楚
【发布时间】:2011-03-10 18:55:23
【问题描述】:

下面的代码我不清楚

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) 但是当上面的 sn-p 初始化时它正在使用 INIT_NSPROXY(init_nsproxy) 这怎么可能?

【问题讨论】:

    标签: c macros linux-kernel


    【解决方案1】:
    #define INIT_NSPROXY(nsproxy) // etc.
    

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

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

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

    【讨论】:

    • 在此特定情况下可能造成混淆的原因是链接的宏定义实际上并未使用该参数。包含该参数是为了与其他类似宏保持一致。
    • @Rahu:如果参数没有在任何地方使用,那么它就会被忽略,并且作为参数传递的内容并不重要。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-12-17
      • 2016-07-01
      • 2019-05-05
      • 2019-03-21
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      相关资源
      最近更新 更多