这可能是一个非常愚蠢的问题,但如何在我的代码中打开这些调试消息呢?
#ifdef DEBUG_MSG
printf("initial state : %d\n", initial_state);
#endif
非常感谢,
答案 0 :(得分:9)
编译时,请尝试以下方法:
$ gcc -DDEBUG_MSG -o foo foo.c
答案 1 :(得分:8)
你必须以某种方式#define
。
的 0。在您的代码中。
在使用该标志之前,直接在您的代码中使用
#define DEBUG_MSG
的 1。在命令行上。
对于每个源文件,或者在makefile中适当地:
gcc -DDEBUG_MSG main.c
(对于gcc,标志为-D<macro-name>
,对于MSVC,它是/D
,对于ICC,它是前者之一,具体取决于您的操作系统。)
的 2。在您的IDE中,某处。
在IDE的项目设置中,找到可以放置定义的位置。在引擎盖下,这是使用1完成的。
答案 2 :(得分:4)
#ifdef
表示“如果已定义”,您的代码实际上会告诉预处理器检查是否在其他地方定义了DEBUG_MSG
。如果是,它将包含您显示的代码。
答案 3 :(得分:2)
如果定义了符号,C预处理器阶段只会将#ifdef/#endif
内的代码传递给编译器阶段。
您通常可以(至少)以两种方式执行此操作。
第一种是为编译器使用命令行开关,例如:
gcc -DDEBUG_MSG myprog.c
(-D
表示定义其后的预处理器符号,虽然这是特定于实现的,但许多编译器使用相同的开关)。第二个是放置一行:
#define DEBUG_MSG
在#ifdef
之前的某个实际源代码中。
前者通常是首选,因为它允许您控制该行为而无需更改源代码,例如,您可以使用相同的源代码生成调试和发布版本。
答案 4 :(得分:1)
#ifdef
仅在定义DEBUG_MSG
时才会展开您的宏。你可以用两种方式做到这一点。在源代码中执行#define DEBUG_MSG 1
或使用-DDEBUG_MSG
进行编译(如果使用gcc
,其他编译器也会有类似的标记)