将预处理程序指令嵌入到函数名称中

时间:2014-12-06 12:12:05

标签: c macros c-preprocessor preprocessor-directive

我想将预处理程序指令嵌入到函数名中。基本上我想创建一个宏,它将预处理器定义为参数并连接它定义的VALUE以获取函数名。

基本上这个:

#define PREFIX foo
#define CALL(P, x) _##P_bar(x)

...then 
CALL(PREFIX, x) should become _foo_bar(x)

不幸的是,这导致_P_bar而不是_foo_bar

是否可以使其按上述方式工作?

1 个答案:

答案 0 :(得分:4)

C标准定义了##运算符之前和之后的宏参数的特殊行为。在这种情况下,它们没有完全扩展。这就是您的代码没有按预期运行的原因。要进一步扩展参数,必须以##运算符之前或之后不会立即使用它的方式使用它。请尝试以下方法:

#define PREFIX foo
#define CALL2(P,x) _##P##_bar(x)
#define CALL(P, x) CALL2(P,x)

CALL(PREFIX, x)