C宏中参数的单个扩展

时间:2014-01-26 19:40:16

标签: c macros

我有一个函数func,它需要一个像PREFIX_XXXX这样的常量作为参数。此外,还有像#define a AAAA这样的宏。是否可以编写一个宏,当调用macro(a)时,它会扩展为func(PREFIX_AAAA)?我尝试了#define macro(x) func(PREFIX_##x),但当然这不会将a扩展为AAAA。我能想到的其他方式也没有用。

1 个答案:

答案 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)

那是你所追求的吗?