假设我有这样的定义:
#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"
,就好像它在创建文字之前不会替换它一样。
任何想法如何实现?
答案 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