我的C代碼中有一個DEBUG宏,但如果我想定義它,我將如何從編譯器執行此操作?我現在用的是gcc編譯器使用以下開關:如何在C中定義DEBUG宏
gcc -ansi -W -Wall -pedantic project.c
我知道-D開關是用來定義宏但林不知道在哪裏把它。我不知道這是怎麼定義它,當我運行它不顯示任何我的代碼
./a -DDEBUG
感謝
我的C代碼中有一個DEBUG宏,但如果我想定義它,我將如何從編譯器執行此操作?我現在用的是gcc編譯器使用以下開關:如何在C中定義DEBUG宏
gcc -ansi -W -Wall -pedantic project.c
我知道-D開關是用來定義宏但林不知道在哪裏把它。我不知道這是怎麼定義它,當我運行它不顯示任何我的代碼
./a -DDEBUG
感謝
編譯代碼時,您可以使用-D
開關:
gcc -ansi -W -Wall -pedantic -DDEBUG project.c
這
./a -DDEBUG
沒有定義DEBUG
。它將-DDEBUG
作爲參數傳遞給您的main()
函數。
我想在這裏
./a
您正在運行在C語言代碼獲得可執行文件。使用調試宏定義選項(如-DDEBUG)調用可執行文件是沒有意義的。這種調試宏定義在編譯時用於選擇要激活或停用的代碼部分,而不是在構建時(對象鏈接時),也不在運行時。
所有類型的宏定義都在編譯之前使用。代碼編譯成目標文件後,宏已經被處理。它們或者通過有定義取代的或經處理的:
#define A 10
#define SUM(x, y) ((x)+(y))
#define DBG 1
#if defined(DBG)
// do some debug operations (printfs, etc.)
#endif
int a = A; // a = 10;
int b = A+1; // b = 11;
int c = SUM(a, b); // c = ((a)+(b));
如果DBG被定義(無論是在源代碼中的#define DBG或#定義DBG 1)調試操作的C代碼被激活,並且編譯成目標文件。如果沒有定義DBG,則調試操作C代碼將從創建的目標文件中刪除。
這就是爲什麼嘗試將調試宏傳遞給可執行文件沒有意義。調用./a -DDEBUG將導致-DDEBUG作爲參數傳遞給可執行文件,並可以在main()函數如下:
int main(int argc, char **argv)
{
int i;
printf("%d %s", argc, argv[0]);
for(i=0; i<argc; i++)
printf("%s", argv[i]); // first argument is always the name of the execute program
return 0;
}
要回答你的問題:我不是用gcc專家,但我想你應該將-DDEBUG傳遞給gcc。
請仔細閱讀本... http://tigcc.ticalc.org/doc/comopts.html
它建議以下...
-D name
Predefine name as a macro, with definition 1.
當您使用以下
..
gcc -ansi -W -Wall -pedantic -DDEBUG project.c
這個定義DEBUG是「1 '...然後你可以在代碼中使用以下代碼...
#ifdef DEBUG
<debug code added here>
#endif
最後的想法,我會建議將你的定義重新命名爲不太通用的東西。
'DEBUG'是調試宏的常用名稱,並被許多庫使用。 – Olaf
「我的C代碼中有一個DEBUG宏」 - 什麼代碼?我沒有看到任何代碼。如果你的C代碼中有「DEBUG宏」,那通常意味着你在你的代碼中定義了它,那麼爲什麼你要在命令行上定義呢?您不能在命令行上定義類似功能的宏。但是這個和其他任何迴應都不會很有幫助,因爲*你*沒有太大的幫助,並且讓我們猜測。 –