我遇到了这个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)
谁能解释一下?谢谢.
令牌##用于连接参数.
例如
#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上查看更多详细信息.