2009-07-03 58 views
12

有沒有辦法讓C++預處理器將#define'ed值擴展爲字符串文字?
例如:你能否將#define擴展爲字符串文字?

#define NEW_LINE '\n' 
Printf("OutputNEW_LINE"); //or whatever 

這看起來對我來說,它應該是可能的,因爲它在編譯之前是?
還是有更好的設計模式來實現這種行爲(不訴諸像sprintf運行時修復)?

編輯我明白#定義的可避邪,但爲了討論...

附加沒有人有這種做法的任何批評?

+0

@GMan任何'不那麼醜'的替代品? – 2009-07-03 12:18:41

+5

那麼,你可以直接在字符串中使用\ n。 C標準規定,至少在寫入文本文件和控制檯時,該單個字符將擴展到平臺用作行分隔符/終止符的任何內容。 – Joey 2009-07-03 12:58:52

回答

25

這將做到這一點:

#define NEW_LINE "\n"   // Note double quotes 
Printf("Output" NEW_LINE); 

(從技術上講這是編譯器加入字符串,而不是預處理器,但最終的結果是一樣的。 )

6

如果我沒記錯的話這是

Printf("Output" NEW_LINE); 
+0

因此,在編譯時將不會通過Printf的格式化工具進行擴展? – 2009-07-03 11:55:22

2

您可以執行以下操作。

#define NEW_LINE "\n" 
printf("Output" NEW_LINE); 
-1

嗯....

printf("Output%s", NEW_LINE); 
1
#define NEW_LINE "\n" 
printf("Output" NEW_LINE); //or whatever 

應該做的伎倆。