2011-07-14 91 views
4

这可能是一个非常愚蠢的问题,但是如何在代码中打开这些调试消息?C:`打开调试消息

#ifdef DEBUG_MSG 
    printf("initial state : %d\n", initial_state); 
#endif 

提前许多感谢,

+0

您需要#define DEBUG_MSG。你的编译器是什么? –

+2

有没有愚蠢的问题。那么,有,但是这不是其中之一:-) – paxdiablo

+0

英特尔icc是编译器 – Eamorr

回答

4

#ifdef意思是“如果定义”,你的代码本质上是告诉预处理器,以检查是否DEBUG_MSG定义别的地方。如果是,它将包含您显示的代码。

+0

是的,我所要做的就是设置'#define DEBUG_MSG 1' ...你可以告诉我是C noob – Eamorr

+0

实际上,你可以省略'1',你需要的只是宏的定义。扩张本身并不重要。 – David

9

编译时,尝试这样的事:

$ gcc -DDEBUG_MSG -o foo foo.c 
+2

+1,因为这意味着不必修改代码本身来添加'#define'。 –

1

#ifdef会让你的宏只有DEBUG_MSG定义进行扩展。你可以用两种方法来做到这一点。在源要么做一个#define DEBUG_MSG 1或使用-DDEBUG_MSG编译(如果使用gcc,还有其他的编译器太相似的标识)

8

你将不得不#define,不知怎的。

0。在你的代码。

直接在你的代码中使用该标志在什么地方:

#define DEBUG_MSG 

1.在命令行。

对于每一个的资源文件,或者适当地在你的makefile:

gcc -DDEBUG_MSG main.c 

(海合会,标志是-D<macro-name>,对于MSVC,它是/D,对ICC是前者的一个,这取决于您的操作系统。)

2.在你的IDE,某处。

在IDE的项目设置,找到在那里你可以把定义。引擎盖下,这是通过使用1

+0

我很想为这个答案投票,但问题被标记为[c],并且您已经使用了'g ++'。 – JeremyP

+0

到底什么是最完整的答案,所以我纠正了编译器并投了票。 – JeremyP

+0

哈哈,谢谢,请原谅我的错误。 –

2

C预处理器阶段,如果符号被定义将仅通过一个#ifdef/#endif内部代码编译器相完成。

您可以在通常(至少)两种方式做到这一点。

第一种方法是使用命令行开关,用于编译器,例如:

gcc -DDEBUG_MSG myprog.c 

-D意味着以限定预处理器符号跟随它,虽然这是特定于实现的,许多编译器使用相同的开关)。第二个是将这样一行:

#define DEBUG_MSG 

你实际的源代码的某个地方#ifdef前内。

前者通常是首选,因为它允许您在不更改源代码的情况下控制该行为,以便例如可以从相同的源代码生成调试和发布版本。