This question already has answers here:
Closed 2 years ago.
Expand macro inside string literal
(2个答案)
假设我有这样的定义:
#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",就好像在创建文本之前它没有替换它一样。
有什么办法可以达到这个目的吗?

最佳答案

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

关于c - 从定义中创建字符串文字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40721229/

10-10 22:44