我想在C++中使用下面的代碼。有人能告訴我爲什麼它顯示錯誤?爲什麼我不能在C中使用#define作爲關鍵字?
#define def namespace;
using def std;
int main(){
return 0;
}
,而下面的代碼工作正常
#define def namespace std;
using def;
int main(){
return 0;
}
我想在C++中使用下面的代碼。有人能告訴我爲什麼它顯示錯誤?爲什麼我不能在C中使用#define作爲關鍵字?
#define def namespace;
using def std;
int main(){
return 0;
}
,而下面的代碼工作正常
#define def namespace std;
using def;
int main(){
return 0;
}
這是因爲嵌入式分號:
#define def namespace;
^
|
WHOA!
注意#define
本身並不需要一個分號終止的定義,所以如果你使用一個宏,它將成爲無論使用哪個宏都將插入的文本的一部分。
預處理之後,第一個例子中將會把using
線分成:
using namespace; std;
具有句法問題,很明顯。
解決方法是刪除尾隨分號在#define
線,像這樣:
#define def namespace
你應該弄清楚如何與你的編譯器讀取的預處理代碼,它理順宏時,總是啓發引起混亂。
哇。我沒有注意到這一點。 – 2013-02-14 09:31:58
@MarkGarcia:當你遇到預處理器的麻煩時,很值得看看你是否可以調用它並查看它的輸出。例如,對於GNU的gcc,你可以說'gcc -E program.cc | less'。您將能夠看到生成的代碼是否符合您的期望,以及後續編譯階段正在處理的代碼。 – 2013-02-14 09:34:30
你爲什麼要用自己的標準關鍵字替換..? – 2013-02-14 10:46:52
@Luc Touraille只是試圖與sintax – banarun 2013-02-14 10:48:29