我有一个文件:
#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模式下。 我做错了什么?
答案 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