从定义中创建字符串文字
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
假设我有一个这样的定义:
#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