C语言断言笔记
1、简介:
断言(assertion)是 C 语言中常用的防御式编程方式,减少编程错误。
2、使用场景:
最常用的是在函数开始的地方,检测所有参数。有时候也可以在调用函数后,检查上下文是否正确。
3、编译:
C 语言的标准库含有 assert() 这个宏(需 #include ),提供断言功能。
当程序以 release 配置编译时(定义了 NDEBUG 宏),assert() 不会做检测;
而当在 debug 配置时(没定义 NDEBUG 宏),则会在运行时检测 assert(cond) 中的条件是否为真(非 0),断言失败会直接令程序崩溃。
4、副作用的断言:
初学者可能会把有副作用的代码放在 assert() 中:
assert(x++ == 0); /* 这是错误的! */
因为这样会导致 debug 和 release 版的行为不一样。
5、何时使用断言:
初学者可能会难于分辨何时使用断言,何时处理运行时错误(如返回错误值或在 C++ 中抛出异常)。
简单的答案是,如果那个错误是由于程序员错误编码所造成的(例如传入不合法的参数),那么应用断言;
如果那个错误是程序员无法避免,而是由运行时的环境所造成的,就要处理运行时错误(例如开启文件失败)。