C++编程思想(卷二):防御性编程
2009-10-18 15:21
204 查看
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 个结点的值及其思想的总结
- 面向对象思想编程
- C++编程思想(2nd卷一):运算符重载
- C++编程思想(卷二):输入输出流
- moon 容器的深入研究 编程思想第17张
- moon 多态 编程思想第8章
- 编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程
- 函数式编程思想:耦合和组合,第2部分
- C++编程思想--初始化与清除
- C++编程思想(卷二):通用容器
- 第1章 JVM语言家族概览 《Kotin 编程思想·实战》
- 第9章 Kotlin与Java互操作(Interoperability) 《Kotin 编程思想·实战》
- 第17章 KOTLIN语言生态《Kotin 编程思想·实战》
- 以类为单位的编程思想
- java编程思想-12通过异常处理错误
- java编程思想易错点三