- 在头文件<assert.h>中(只在debug下起作用)
- void assert(int expression):现计算表达式expression,如果真值为假(0),则程序会向stderr打印出一条出错信息,然后调用abort终止程序运行。每个assert只用来检验一个条件,因为同时检验多个时,就无法直观看到哪个条件错误
e.g:
fp=fopen("test.txt","r");//以只写方式打开文件,文件不存在则打开失败
assert(fp);//这里可能出错
fclose(fp);//若出错则执行不到这里
- assert只在debug版生效,所以不要把执行代码放在assert()里,不能用来改变环境
e.g:
int main(){
int a=2;
int b=1;
assert((b++ )!=0);
cout<<a/b<<endl;
}
/*b=1不为0,所以assert执行后程序继续运行
但在debug版 有b++,所以输出1
而release版输出2
*/
频繁调用assert会影响程序性能,所以之后可用#define NDEBUG;(需写在#include<assert.h>前) ;来关闭。
因为<assert.h>定义的宏受NDEBUG影响,如果预编译时定义了#define NDEBUG,则assert.h里定义的宏都为空
e.g
#include<iostream>
#define NDEBUG
#include<assert.h>