我的C代码中有一个DEBUG宏,但如果我想定义它,我将如何从编译器中执行此操作?我正在使用带有以下开关的gcc编译器:
gcc -ansi -W -Wall -pedantic project.c
我知道-D开关用于定义宏但我不知道放在哪里。我不确定这是否如何定义它,它在我运行我的代码时不会显示任何内容
./a -DDEBUG
谢谢
答案 0 :(得分:5)
请阅读此内容...... http://tigcc.ticalc.org/doc/comopts.html
它建议以下......
npm install grunt-contrib-watch --save-dev
使用以下内容时..
-D name
Predefine name as a macro, with definition 1.
这将DEBUG定义为'1'...然后您可以在代码中使用以下内容...
gcc -ansi -W -Wall -pedantic -DDEBUG project.c
最后的想法,我建议将你的定义重命名为不那么通用的东西。
答案 1 :(得分:2)
编译代码时使用-D
开关:
gcc -ansi -W -Wall -pedantic -DDEBUG project.c
此
./a -DDEBUG
未定义DEBUG
。它将-DDEBUG
作为参数传递给您的main()
函数。
答案 2 :(得分:2)
我想这里
./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或#define 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。