使用宏定义打开/关闭调试输出(debug版本与release版本互相切换)

不管使用什么编程语言、在什么平台环境下进行开发,查看程序运行状态和调试都是必不可少的。我们以前在编写 C/C++ 和 Java 工程时,可以使用 VS 和 eclipse ,或者对单片机进行编程时,可以使用 Keil 、 ADS 或 CodeWarrior,使用这些 IDE 都可以很方便地看到程序状态信息和调试信息。但是在嵌入式编程中,我们使用的更多的是 SourceInsight、SublimeText 或者 UltraEdit 这样的文本编辑器。这些编辑器不能很好地提供可以帮助我们调试的信息,就需要我们使用 printf 语句将参数输出显示。这些额外增加的代码对于设备来说没有任何用处,反而增加了可执行文件的大小,让本来就弥足珍贵的嵌入式设备存储空间白白浪费了不少。有没有一种方法可以让我们在调试时可以观察到参数的打印输出,而在对外发行时自动注释掉这些 printf 代码呢?当然是有的,比如下面这种我在工程中所使用的写法就可以办到:

首先编写一个类似下面这样的头文件:

#ifndef __TESTDBG_H__
#define __TESTDBG_H__

//#define DBG // 启用 DBG 宏时将开启调试输出

#ifdef DBG


#include <stdio.h>
void testDBG(unsigned char a, int b, long c,...){
printf("Debug information printing unlocked!\n");
}
#else
#define testDBG(a, b, c, d,...)
#endif

#endif

然后再编写一个带有调试信息输出的C文件:

#include <stdio.h>
#include "testdbg.h"

int main(char argc, char *argv[]){
testDBG(1, 1, 1, 1);
return 0;
getchar();
}

在注释掉 #define DBG 语句的情况下,main 函数中的 testDBG 函数是不会输出 "Debug information printing unlocked!" 的,因为函数调用的代码都被替换为空了。对 DBG 宏定义取消注释,运行结果将输出调试信息 "Debug information printing unlocked!"。

你可能感兴趣的:(宏,Debug版本,Release版本,嵌入式编程,调试输出)