使用#define参数的名称而不进行字符串化

时间:2015-07-27 11:49:31

标签: c c-preprocessor

有没有办法在没有字符串化的情况下将确切的单词传递到#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;
}

3 个答案:

答案 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__之前,在这种情况下

     
      
  1. VA_ARGS 非空时,##不执行任何操作

  2.   当 VA_ARGS 为空时,
  3. 删除逗号。

  4.   

这使得可以定义具有可变数量参数的宏,例如fprintf (stderr, format, ##__VA_ARGS__)