2016-11-21 64 views
0

可以說我有一個定義,像這樣:創建一個字符串從字面定義

#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",就好像它不創造文字之前更換它。

任何想法如何實現?

+0

呼叫間接。例如'#define str(s)str_(s)''#define str_(s)#s' – BLUEPIXY

回答

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 
+0

我以爲我仔細閱讀它,但我錯過了第二個間接調用...謝謝。 –