2013-02-14 71 views
2

我想在C++中使用下面的代碼。有人能告訴我爲什麼它顯示錯誤?爲什麼我不能在C中使用#define作爲關鍵字?

#define def namespace; 
using def std; 
int main(){ 
return 0; 
} 

,而下面的代碼工作正常

#define def namespace std; 
using def; 
int main(){ 
return 0; 
} 
+0

你爲什麼要用自己的標準關鍵字替換..? – 2013-02-14 10:46:52

+0

@Luc Touraille只是試圖與sintax – banarun 2013-02-14 10:48:29

回答

16

這是因爲嵌入式分號:

#define def namespace; 
        ^
         | 
        WHOA! 

注意#define本身並不需要一個分號終止的定義,所以如果你使用一個宏,它將成爲無論使用哪個宏都將插入的文本的一部分。

預處理之後,第一個例子中將會把using線分成:

using namespace; std; 

具有句法問題,很明顯。

解決方法是刪除尾隨分號在#define線,像這樣:

#define def namespace 

你應該弄清楚如何與你的編譯器讀取的預處理代碼,它理順宏時,總是啓發引起混亂。

+1

哇。我沒有注意到這一點。 – 2013-02-14 09:31:58

+7

@MarkGarcia:當你遇到預處理器的麻煩時,很值得看看你是否可以調用它並查看它的輸出。例如,對於GNU的gcc,你可以說'gcc -E program.cc | less'。您將能夠看到生成的代碼是否符合您的期望,以及後續編譯階段正在處理的代碼。 – 2013-02-14 09:34:30

相關問題