我知道標題是奇怪的,所以這裏的解釋是:G ++ -D選項添加數字1
我有一些代碼,我寧願不修改,但我需要重新定義某些功能。 最小的例子是這樣的:
int main()
{
strcpy_s(a,b);
}
但是當我運行此:
我得到:
int main()
{
strcpy(a,b) buahaha 1;
}
這是什麼1
?忽略buhahaha,它只是表明PP做了些什麼。
我知道標題是奇怪的,所以這裏的解釋是:G ++ -D選項添加數字1
我有一些代碼,我寧願不修改,但我需要重新定義某些功能。 最小的例子是這樣的:
int main()
{
strcpy_s(a,b);
}
但是當我運行此:
我得到:
int main()
{
strcpy(a,b) buahaha 1;
}
這是什麼1
?忽略buhahaha,它只是表明PP做了些什麼。
有兩種方法可以使用-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
,並解釋您得到的結果。
The documentation顯示-D
選項的語法中有一個等號,而您沒有使用它。
你的命令,也許應該是:
$ g++ -E -P -w -D"strcpy_s(D,S)=strcpy(D,S)" test.cpp