I've utilized a set of preprocessor macros from another question that allows me to prefix symbol names(枚举,函数名,结构名等),即:
i is 123 in func_3.
这可以按预期工作,输出如下:#define NAME(SOME_MACRO_CONST) (123)
#define NAME(SOME_MACRO_CONST2) (123)
我想要这段代码:
#define 3SOME_MACRO_CONST (123)
#define 3SOME_MACRO_CONST2 (123)
扩展为:
LIB_A_
我意识到宏不应该以数字开头。在最终的代码中,我将使用LIB_B_
和NAME
等名称作为前缀。
但是,如果我尝试使用宏作为我的NAME
可变参数宏的参数,它就会失败:
#define NAME(MY_CONST) (3)
宏:test.c:7:0: warning: "NAME" redefined
#define NAME(MY_CONST) 3
#define VARIABLE ## MY_CONST (3)
test.c:8:18: error: '##' cannot appear at either end of a macro expansion
#define VARIABLE ## MY_CONST (3)
td
如何创建具有所有宏的公共前缀的简单宏定义(名称+值)?目标是能够制作源文件的多个副本并使用不同的标志编译它们,这样所有版本都可以链接到同一个最终二进制文件中,而不会发生符号/宏名称冲突(以后宏将被移动到头文件中)。最终文件太大,无法用M4或模板语言编写。 理想情况下,该解决方案将涉及能够为所有用例使用单个宏函数/可变参数宏,但我可以使用一个宏进行符号前缀,另一个用于宏名称前缀。< /强>