C语言(调试绝活)
2016-05-20 09:53
260 查看
众所周知,写一段稍微复杂的代码,就会马上面临调试的需要,而最基本的检测程序运行情况的调试技巧,就是在代码中安插许多 “警哨”
来帮助我们监视随时可能发生的异常。
技术上这没啥好说的,只是对于一个代码洁癖晚期患者来说,怎样写得干净又漂亮,是一件比写代码本身更重要的事情。
先来一段反面教材看看:
像上述程序那样的话,将不得已要对很多临时调试性代码做注释,用的时候要去掉注释符,非常麻烦。
更好的写法是怎样的呢?
注意到,我们使用条件编译语句 #ifdef 来包含待调试语句,这样就能非常方便地开启或者关闭调试信息,而且没有注释符嵌套的烦恼。
那么,我们怎么控制这些调试语句的开启和关闭呢? 除了在代码里面定义宏之外,更正统的做法是给编译器相应的参数来控制:
开启调试功能:
gcc example.c -o example -DDEBUG
在这里,-D就是编译的同时,让gcc帮我们自动定义(Define)一个临时宏,这个临时宏的名字就紧跟在这个选项 -D 的后面,比如 DEBUG。带上了这个选项就相当于在代码里面写了这一行代码:
#define DEBUG
关闭调试功能:
gcc example.c -o example
注意到,当我们关闭调试功能的时候,虽然代码还在,但是编译出来的执行程序已经去除了这部分代码,因此可以最大限度节约了程序的尺寸大小,同时我们也再不用在代码中频繁修改来增删注释。这样用起来是不是非常方便呢?
相关文章推荐
- Box2D C++ 教程-画自己的图像
- Box2D C++ 教程-使用debug Draw
- Box2D C++ 教程-跳跃
- c/c++ digraph and trigraph
- Box2D C++ 教程-旋转到指定角度
- Box2D C++ 教程-匀速运动
- Box2D C++ 教程-自定义重力
- Box2D C++ 教程-力和冲量
- Box2D C++ 教程-设置世界
- C/C++中extern关键字详解
- Box2D C++ 教程-定制器
- Box2D C++ 教程-物体
- Box2D C++ 教程-创建测试
- Box2D C++ 教程-Testbed结构
- RTTI
- 一个有趣的基于C++的模拟发牌程序
- C++ explicit关键字详解
- 关于bmp格式详解
- C++中智能指针的设计和使用
- c++ 中类重复定义的分析与解决办法