调试宏奇怪行为

时间:2015-10-02 23:29:33

标签: c debugging compilation

我有一个文件:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define DEBUG

int main(void) {

#ifdef DEBUG
    printf("We are in debug mode");
#endif

}

我被告知使用ifdef和endif(为此)。 当我使用makefile(我不允许编辑)编译它时,我的问题出现了。会发生什么是print语句(Debug one)打印,这不应该是因为我没有处于DEBUG模式。我尝试使用此命令(在Ubuntu 14.04上)

make -DEBUG

但这确实有所不同,输出文件打印ifdef语句,尽管不在DEBUG模式下。 我做错了什么?

3 个答案:

答案 0 :(得分:2)

您在源文件中明确定义了DEBUG

#define DEBUG

删除该行,这样就不会覆盖构建环境中的任何定义。

答案 1 :(得分:1)

您在源文件中明确定义DEBUG(使用#define DEBUG),因此无论您如何构建内容,始终都处于调试模式。< / p>

删除它将处于非调试模式的#define DEBUG,除非在编译命令行上设置了调试。

使用命令make CPPFLAGS=-DDEBUG使用makefile构建并将-DDEBUG参数添加到预处理程序标志,以便在调试模式下构建(注意两个D s)

答案 2 :(得分:1)

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void) {

#ifdef DEBUG
   printf("We are in debug mode");
#endif

return 0;
}

需要调试时执行此操作

 gcc src.c -DDEBUG

-D选项用于运行时宏

另请注意 ifdef仅检查定义,它不会将值检查为true或false

------------------------
#define DEBUG 0
if (DEBUG)
  will not enter here

#ifdef DEBUG
  will enter here
$endif
------------------------

#define debug 0
int main()
{

if (debug) {
   printf("Hello, World!2\n");
}

#ifdef debug
   printf("Hello, World!3\n");
#endif

return 0;
}
-----------------------------------
output:
Hello, World!3