我有一个函数func
,它需要一个像PREFIX_XXXX
这样的常量作为参数。此外,还有像#define a AAAA
这样的宏。是否可以编写一个宏,当调用macro(a)
时,它会扩展为func(PREFIX_AAAA)
?我尝试了#define macro(x) func(PREFIX_##x)
,但当然这不会将a
扩展为AAAA
。我能想到的其他方式也没有用。
答案 0 :(得分:2)
粘贴##
的参数不会进行宏扩展。因此,您将需要另一个插页式宏,例如:
#define CONCAT(a,b) a ## b
#define MACRO(x) func(CONCAT(PREFIX_,x))
MACRO(TEST)
要进行测试,请在上面运行gcc -E
,然后获得:
# 1 "macro.c"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "macro.c"
func(PREFIX_TEST)
那是你所追求的吗?