1.调试标记
为了避免在bug找到后,要删除调试代码,我们可以利用预处理器的选择编译功能,在需要调试时,将编译“开关”打开,故障解除后,将编译“开关”关闭。这样编译器在编译文件的时候,不会把不需要的调试代码编译成目标代码,减少了目标文件的大小。这里所说的“开关”就是起到一个调试标记的作用,常用的标识名是:DEBUG(注意,不能使用NDEBUG,这是C中的保留字)
#define DEBUG
#ifdef DEBUG
//需要调试的代码
#endif
2.把变量和表达式转换成字符串
在调试程序的过程中,往往需要输出一些变量和表达式的值,常规的方法可以这样实现:
cout<<"i="<<i<<endl;
cout<<"a+b="<<a+b<<end;
下述方法可能使代码更简洁:
1 #include <iostream>
2 #define PR(E) cout<<#E<<E<<endl
3 using namespace std;
4 int main(void)
5 {
6 PR(i);
7 PR(a+b);
8 return 0;
9 }
3.C语言的assert()宏
assert()是c语言中定义的一个调试宏,在C中的头文件是
当使用assert()时,给它传递一个参数,该参数是一个表示某个断言为真的表达式。预处理器会产生代码去判断这个断言的真假。如果断言为假,则发出一个错误信息告诉断言是什么并且终止程序
//#define NDEBUG
#include<cassert>
int main()
{
int i=100;
assert(i!=100);
}
允许结果:
如果调试结束,可以在assert()宏前面插入#define NDEBUG 结束调试
原文链接: https://www.cnblogs.com/liujiangyi/archive/2012/08/08/2627875.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/58498
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!