2011-07-28 41 views
6

GNU的CPP允許你打開宏參數成字符串像這樣如何使用cpp將宏變成字符串?

#define STR(x) #x 

然後,STR(hi)取代有"hi"

但你怎麼把一個宏(不是宏參數)轉換成字符串?

說我有一個宏CONSTANT有一些值,例如

#define CONSTANT 42 

這不起作用:STR(CONSTANT)。這產生"CONSTANT"這不是我們想要的。

+0

我假設你想要的輸出爲「42」 - 我不認爲你可以不寫一個函數做。 – Soren

回答

14

訣竅是定義一個叫做STR的新宏。

#define STR(str) #str 
#define STRING(str) STR(str) 

然後STRING(CONSTANT)根據需要得到"42"

+0

我相信像這樣使用的&符號通常被稱爲宏「字符串」運算符。 –

+5

'#'不是「&符號」。 –

10

你需要雙間接魔法:

#define QUOTE(x) #x 
#define STR(x) QUOTE(x) 

#define CONSTANT 42 

const char * str = STR(CONSTANT); 
+1

+1使用有意義的名稱。 – ArjunShankar