我看到这个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/