C宏示例

art*_*rtm 1 c macros

我遇到了这个C宏:

    #define __COMMAND(_section, _symname, _name, _args, _nlcmd, _flags, _hidden, _idby, _handler, _help, _sel)\
    static struct cmd                       \
    __cmd ## _ ## _symname ## _ ## _handler ## _ ## _nlcmd ## _ ## _idby ## _ ## _hidden\
    __attribute__((used)) __attribute__((section("__cmd"))) = { \
        .name = (_name),                    \
        .args = (_args),                    \
        .cmd = (_nlcmd),                    \
        .nl_msg_flags = (_flags),               \
        .hidden = (_hidden),                    \
        .idby = (_idby),                    \
        .handler = (_handler),                  \
        .help = (_help),                    \
        .parent = _section,                 \
        .selector = (_sel),                 \
    }
Run Code Online (Sandbox Code Playgroud)

我隐约明白,它试图cmd从宏的一堆输入参数中定义一个类型的结构.但我真的不明白这两行是什么意思:

 __cmd ## _ ## _symname ## _ ## _handler ## _ ## _nlcmd ## _ ## _idby ## _ ## _hidden\
 __attribute__((used)) __attribute__((section("__cmd")))     = {     \
Run Code Online (Sandbox Code Playgroud)

谁能解释一下?谢谢.

R S*_*ahu 5

令牌##用于连接参数.

例如

#define CONCAT(A, B) A ## B

int a = CONCAT(My, Function)();
Run Code Online (Sandbox Code Playgroud)

这相当于说:

int a = MyFunction();
Run Code Online (Sandbox Code Playgroud)

您可以在http://en.cppreference.com/w/c/preprocessor/replace上查看更多详细信息.