从定义中创建字符串文字

Creating a string literal from a define

假设我有一个这样的定义:

#define MY_FUNC_NAME my_func

我想为它获取一个字符串文字,例如"my_func".

我试过像这样使用哈希预处理器运算符:

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

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

有什么实现方法吗?

正如 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