1
比方說,我有一個宏觀如何將宏值擴展爲寬字符串?
#define CLASS_NAME ItemsList
後來我想用它的價值,而不是一個符號,而是作爲寬字符串。我的問題開始了。當我簡單的寫(在普通的C++代碼,而不是在宏定義):
L#CLASS_NAME
編譯器給我一個錯誤,說令牌#
此時不預期。當我寫的代理它
#define WSTRING(S) L#S
,並用它
WSTRING(CLASS_NAME)
我會得到廣泛的字符串內容「CLASS_NAME」。我想擴展宏,意思是獲取它的價值,而不是轉換宏名稱。
那麼如何正確地做到這一點(Visual Studio 2012)?
您對定義有拼寫錯誤,「WIDEN」應展開爲「WIDEN2」。但更重要的問題是,編寫的「WIDEN(CLASS_NAME)」將擴展到L「CLASS_NAME」,因爲'#'處於第一級擴展。它必須在第二級擴展才能真正擴展參數。 –
另請參閱http://stackoverflow.com/questions/2751870/how-exactly-does-the-double-stringize-trick-work –
@JanHudec你是對的。 – Simple