2013-03-05 37 views
0

我知道標題是奇怪的,所以這裏的解釋是:G ++ -D選項添加數字1

我有一些代碼,我寧願不修改,但我需要重新定義某些功能。 最小的例子是這樣的:

int main() 
{ 
strcpy_s(a,b); 
} 

但是當我運行此:

我得到:

int main() 
{ 
strcpy(a,b) buahaha 1; 
} 

這是什麼1?忽略buhahaha,它只是表明PP做了些什麼。

回答

5

有兩種方法可以使用-D選項:

  • -Dname
  • -Dname=value

第一個定義name作爲1,第二個將name定義爲value

name被允許包含圓括號,以便您可以在命令行上定義類似函數的宏。類似於-Dfoo bar的內容不包含等號,因此它被解釋爲試圖將foo bar定義爲1。宏名稱不能包含空格,所以這可能會導致錯誤消息,但它不會被檢測到,並最終導致編譯器混淆。改爲嘗試-D"strcpy_s(D,S)=strcpy(D,S) buahaha"

我懷疑的情況是-Dname轉換爲#define name 1,並-Dname=value轉換爲#define name value,和錯誤檢查後,纔出現這種情況。這會將-D"strcpy_s(D,S) strcpy(D,S) buahaha"轉換爲#define strcpy_s(D,S) strcpy(D,S) buahaha 1,並解釋您得到的結果。

2

The documentation顯示-D選項的語法中有一個等號,而您沒有使用它。

你的命令,也許應該是:

$ g++ -E -P -w -D"strcpy_s(D,S)=strcpy(D,S)" test.cpp