gcc的宏扩展问题

gcc的宏扩展问题,gcc,macros,Gcc,Macros,在gcc中,稍后在同一扩展中引用宏扩展的结果似乎不起作用。例如: #define TESTMACRO(name) \ static int name##_func(int solNo) { \ return (solNo); \ }\ static int name##Thing = {0,##name##_func},NULL,{"", capInvSw##name}}; TESTMACRO(stuff) 这

在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中执行此操作的等效方法是什么?

您可以通过传递
-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`}};
在展开的宏中,似乎有一个额外的/缺少的括号
}


希望有帮助。

啊,是的,这是一个人工示例,旨在消除现实生活中的pinmame问题中的一些模糊性。您的预处理器输出为扩展提供了什么?看起来宏体中有一个虚假的额外值,这就是错误消息所抱怨的。。。