有沒有辦法讓C++預處理器將#define'ed值擴展爲字符串文字?
例如:你能否將#define擴展爲字符串文字?
#define NEW_LINE '\n'
Printf("OutputNEW_LINE"); //or whatever
這看起來對我來說,它應該是可能的,因爲它在編譯之前是?
還是有更好的設計模式來實現這種行爲(不訴諸像sprintf運行時修復)?
編輯我明白#定義的可避邪,但爲了討論...
附加沒有人有這種做法的任何批評?
有沒有辦法讓C++預處理器將#define'ed值擴展爲字符串文字?
例如:你能否將#define擴展爲字符串文字?
#define NEW_LINE '\n'
Printf("OutputNEW_LINE"); //or whatever
這看起來對我來說,它應該是可能的,因爲它在編譯之前是?
還是有更好的設計模式來實現這種行爲(不訴諸像sprintf運行時修復)?
編輯我明白#定義的可避邪,但爲了討論...
附加沒有人有這種做法的任何批評?
這將做到這一點:
#define NEW_LINE "\n" // Note double quotes
Printf("Output" NEW_LINE);
(從技術上講這是編譯器加入字符串,而不是預處理器,但最終的結果是一樣的。 )
如果我沒記錯的話這是
Printf("Output" NEW_LINE);
因此,在編譯時將不會通過Printf的格式化工具進行擴展? – 2009-07-03 11:55:22
您可以執行以下操作。
#define NEW_LINE "\n"
printf("Output" NEW_LINE);
嗯....
printf("Output%s", NEW_LINE);
#define NEW_LINE "\n"
printf("Output" NEW_LINE); //or whatever
應該做的伎倆。
@GMan任何'不那麼醜'的替代品? – 2009-07-03 12:18:41
那麼,你可以直接在字符串中使用\ n。 C標準規定,至少在寫入文本文件和控制檯時,該單個字符將擴展到平臺用作行分隔符/終止符的任何內容。 – Joey 2009-07-03 12:58:52