1
我在我的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
@Xaqq不,不幸的是我必须遵循由两个宏强加的命名约定...... – LuisABOL