在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中执行此操作的等效方法是什么?
答案 0 :(得分:1)
您可以通过传递-E
标志来尝试仅在代码上运行预处理器:
gcc -E foo.c
哪个宏会评估您:
static int stuff_func(int solNo) { return (solNo); } static int stuffThing = {0,stuff_func},NULL,{"", capInvSwstuff`}};
为了便于阅读,可以将其扩展为:
static int stuff_func(int solNo) {
return (solNo);
}
static int stuffThing = {0,stuff_func},NULL,{"", capInvSwstuff`}};
在展开的宏中,您似乎有一个多余的/缺少括号}
。
希望有帮助。