【发布时间】:2019-03-07 21:44:14
【问题描述】:
在 gcc 中,稍后在同一扩展中引用宏扩展的结果似乎不起作用。例如:
#define TESTMACRO(name) \
static int name##_func(int solNo) { \
return (solNo); \
}\
static int name##Thing = {0,##name##_func},NULL,{"", capInvSw##name}};
TESTMACRO(stuff)
这会导致如下错误:
test.c:7:29: error: pasting "," and "stuff" does not give a valid preprocessing token
static int name##Thing = {0,##name##_func},NULL,{"", capInvSw##name`}};
^
test.c:9:1: note: in expansion of macro ‘TESTMACRO’
TESTMACRO(stuff)
我希望创建一个名为 stuff_func 的函数并将其传递给 stuffThing。我相信这适用于其他编译器。在 gcc 中执行此操作的等效方法是什么?
【问题讨论】:
-
你的预处理器输出为扩展提供了什么?
-
看起来你在宏体中有一个虚假的额外##,这就是错误消息所抱怨的......