C++编程思想(卷二):防御性编程
2009-11-09 09:52
363 查看
assert()宏断言定义在头文件<cassert>中
典型的assert()实现:
#ifdef NDEBUG
#define assert(cond) ((void) 0)
#else
void assertImpl(const char*, const char*, long);
#define assert(cond) /
((cond) ? (void)0 : assertImpl(???))
#endif
定义NDEBUG宏并重新编译程序,会自动去掉说有断言代码。
如果想开启或关闭程序中某些位置的断言,不但必须#define或#undef NDEBUG,而且必须重新包含<cassert>。
断言中只能包含不会修改程序状态的测试条件。
断言的意图是验证设计决定,造成它失败的唯一原因应该是程序逻辑有缺陷。
在任何时间使用断言来测试任何不变量都是合适的。
使用断言可以在程序代码真正出现问题之前,帮助程序设计人员找到其中的逻辑错误。
先编写单元测试程序是一种能够确保将要编写的代码能够正确工作的最好方法。
测试程序 + 编码 比直接编码更快
用于代码跟踪的宏:
#define TRACE(ARG) cout << #ARG << endl; ARG
通常的内存分配问题包括:
1.对不是在动态存储区上分配的内存误使用delete
2.多次重复释放在动态存储区上分配的一个内存
3.最常见的情况是忘记删除一个指针
典型的assert()实现:
#ifdef NDEBUG
#define assert(cond) ((void) 0)
#else
void assertImpl(const char*, const char*, long);
#define assert(cond) /
((cond) ? (void)0 : assertImpl(???))
#endif
定义NDEBUG宏并重新编译程序,会自动去掉说有断言代码。
如果想开启或关闭程序中某些位置的断言,不但必须#define或#undef NDEBUG,而且必须重新包含<cassert>。
断言中只能包含不会修改程序状态的测试条件。
断言的意图是验证设计决定,造成它失败的唯一原因应该是程序逻辑有缺陷。
在任何时间使用断言来测试任何不变量都是合适的。
使用断言可以在程序代码真正出现问题之前,帮助程序设计人员找到其中的逻辑错误。
先编写单元测试程序是一种能够确保将要编写的代码能够正确工作的最好方法。
测试程序 + 编码 比直接编码更快
用于代码跟踪的宏:
#define TRACE(ARG) cout << #ARG << endl; ARG
通常的内存分配问题包括:
1.对不是在动态存储区上分配的内存误使用delete
2.多次重复释放在动态存储区上分配的一个内存
3.最常见的情况是忘记删除一个指针
相关文章推荐
- C++编程思想(卷二):防御性编程
- C++笔记——c++编程思想(下)第二三四章防御性编程及输入输出流
- C++编程思想——附录:编程准则
- 由2个和尚打水想到的---如何学习VB编程思想喝C++编程思想
- 防御性编程习惯:求出链表中倒数第 m 个结点的值及其思想的总结
- 浅谈编程解决实际问题的常见思想(转载)
- java编程思想学习----第一章----对象入门
- C++编程思想(2nd卷一):引用和拷贝构造函数
- C++编程思想(卷二):输入输出流
- JAVA编程思想-第四章 控制执行流程
- Java编程思想笔记第九章(接口)
- iOS 编程思想 工厂模式
- 编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程
- java编程思想阅读笔记(一)
- 从裸机编程到嵌入式Linux编程思想的转变------分而治之:驱动和应用程序
- C++编程思想(卷二):通用容器
- 第1章 JVM语言家族概览 《Kotin 编程思想·实战》
- 第9章 Kotlin与Java互操作(Interoperability) 《Kotin 编程思想·实战》
- 第17章 KOTLIN语言生态《Kotin 编程思想·实战》
- java编程思想-12通过异常处理错误