我想将预处理程序指令嵌入到函数名中。基本上我想创建一个宏,它将预处理器定义为参数并连接它定义的VALUE以获取函数名。
基本上这个:
#define PREFIX foo
#define CALL(P, x) _##P_bar(x)
...then
CALL(PREFIX, x) should become _foo_bar(x)
不幸的是,这导致_P_bar
而不是_foo_bar
。
是否可以使其按上述方式工作?
答案 0 :(得分:4)
C标准定义了##运算符之前和之后的宏参数的特殊行为。在这种情况下,它们没有完全扩展。这就是您的代码没有按预期运行的原因。要进一步扩展参数,必须以##运算符之前或之后不会立即使用它的方式使用它。请尝试以下方法:
#define PREFIX foo
#define CALL2(P,x) _##P##_bar(x)
#define CALL(P, x) CALL2(P,x)
CALL(PREFIX, x)