我看到这个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),                 \
    }

我模糊地理解,它试图从宏的一堆输入参数中定义一个cmd类型的结构但我真的不明白这两句话的意思:
 __cmd ## _ ## _symname ## _ ## _handler ## _ ## _nlcmd ## _ ## _idby ## _ ## _hidden\
 __attribute__((used)) __attribute__((section("__cmd")))     = {     \

有人能解释吗?谢谢。

最佳答案

标记##用于连接参数。
例如。

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

int a = CONCAT(My, Function)();

这相当于说:
int a = MyFunction();

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

关于c - C宏示例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33208488/

10-13 09:48