【发布时间】:2013-07-11 14:01:08
【问题描述】:
我的 C 代码中有两个宏,它们可以帮助我组成某些变量的名称。例如,考虑以下情况:
#define MACROA(name) A_##name
#define MACROB(name) B_##name
void *MACROB(MACROA(object));
所以,我正在尝试声明一个名为B_A_object 的变量。但是,这不起作用,编译器会向我抛出消息:
object.c:27:21: error: a parameter list without types is only allowed in a function definition
void *MACROB(MACROA(object));
^
object.c:26:26: note: expanded from macro 'MACROB'
#define MACROB(name) B_##name
^
因此,预处理器似乎没有获取MACROA(object) 的结果,但它正在考虑表达式本身,以便尝试生成B_MACROA(object)。那么,我要怎么做才能让预处理器考虑一个宏传递给另一个宏的结果呢?
【问题讨论】:
-
如果这不是为了学习/测试目的,你应该尽量避免它。
-
@Xaqq 不,不幸的是我必须遵循两个宏强加的命名约定......
标签: c macros c-preprocessor