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

本文介绍了一种在嵌入式编程中实现调试输出和发行时自动注释的方法,通过宏定义控制printf语句的启用与禁用,有效减少可执行文件大小,节省嵌入式设备存储资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不管使用什么编程语言、在什么平台环境下进行开发,查看程序运行状态和调试都是必不可少的。我们以前在编写 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!"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值