从定义创建字符串文字

时间:2016-11-21 13:22:18

标签: c c-preprocessor string-literals

假设我有这样的定义:

#define MY_FUNC_NAME my_func

我想获得一个字符串文字,例如"my_func"

我尝试使用hash预处理器运算符,如下所示:

#define str(s) #s
#define MY_FUNC_NAME_LITERAL str(MY_FUNC_NAME)

但是这会产生"MY_FUNC_NAME"而不是"my_func",就好像它在创建文字之前不会替换它一样。

任何想法如何实现?

1 个答案:

答案 0 :(得分:2)

就像GCC documentation解释的那样,你需要两个宏才能做到这一点

 #define xstr(s) str(s)
 #define str(s) #s
 #define foo 4
 str (foo)
      ==> "foo"
 xstr (foo)
      ==> xstr (4)
      ==> str (4)
      ==> "4"

此问题的实际答案:

#define str_(s) #s
#define str(s) str_(s)
#define MY_FUNC_NAME_LITERAL str(MY_FUNC_NAME)
#define MY_FUNC_NAME my_func