有没有办法在没有字符串化的情况下将确切的单词传递到#define
?用例示例:
#define NUM 1
#define CREATE_FUN(X) \
void prefix_X() { \ // used exact words passed in
int x = X; \ // use value later on
}
CREATE_FUN(NUM)
输出看起来像:
void prefix_NUM() {
int x = 1;
}
答案 0 :(得分:5)
使用令牌连接(##
):
#define NUM 1
#define CREATE_FUN(X) \
void prefix_##X() { \
int x = X; \
}
CREATE_FUN(NUM)
答案 1 :(得分:1)
#define CREATE_FUN(X) \
int prefix_##X() { \
int x = X; \
return x; \
}
CREATE_FUN(NUM)
答案 2 :(得分:0)
您可以使用令牌粘贴(##)运算符:
#define CREATE_FUN(X) int prefix_##X() { int x=X; return x;}
示例用例:
某些编译器提供的扩展程序允许
##
显示在逗号之后和__VA_ARGS__
之前,在这种情况下
- 当 VA_ARGS 为空时,
VA_ARGS 非空时,
##
不执行任何操作- 醇>
删除逗号。
这使得可以定义具有可变数量参数的宏,例如fprintf (stderr, format, ##__VA_ARGS__)