This question already has answers here:
Closed 2 years ago.
Expand macro inside string literal
(2个答案)
假设我有这样的定义:
我想要一个字符串文字,例如
我尝试使用hash预处理器运算符,如下所示:
但是这将产生
有什么办法可以达到这个目的吗?
这个问题的实际答案是:
(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