assert
C 语言中assert.h头文件唯一的目的就是提供了assert宏的定义,这个被称为断言,断言的效果是,如果断言的内容为真,断言就没有任何意义,如果断言为假,程序将执行异常终止。
测试代码:
#include <stdio.h> #include <assert.h> int main(int argc,char** argv) { assert(1); printf("it is OK.\n"); assert(0>-5); printf("guess what?\n"); assert(0); printf("now what?\n"); return 0; }//运行的话,会显示什么呢?
直接给答案:
it is OK.
guess what?
Assertion failed: 0, file c:\myc\main.c, line 9
第一个断言为真,所以没啥好讲的,第二个表面上看起来不是真,其实仍旧是真,因为C在做比较的时候会把参与比较的两个数作为无符号整数,所以,断言依旧为真。
第三个直接断言假,因此程序终止,并输出原因。
通常断言放在认为不可能出现的情况,如果这种情况真的发生了,我们宁可程序当场挂掉,也不希望它不健康地运行,当然,在实际使用的时候,还是在调试阶段使用,不要给用户提示这个。
与之相关的一个宏定义是NDEBUG,如果有这个宏定义,则断言就不活动了,相当于没有效果,切记,这个宏定义一定要放在#include <assert.h>之前才能起作用。
#define NDEBUG #include <stdio.h> #include <assert.h> int main(int argc,char** argv) { assert(1); printf("it is OK.\n"); assert(0>-5); printf("guess what?\n"); assert(0); printf("now what?\n"); return 0; }
类似这样。如果把这个定义放在了#include <assert.h>的后面,实际上是不起作用的。