assert用法
void assert(int expression);
C++中assert,即断言,可以在程序调试阶段检查错误,常用的就比如函数传参时,若是整型,是否超出范围;若是字符串型,地址是否为空等。
在正常时,程序可以照常执行,如果出现超过范围或空地址时,就可以报错提示。这里的提示是我们写入assert的参数表达式,只不过assert将这个表达式发送给了标准输出文件。
assert的执行是判断expression是否为假,只有在表达式为假时,才会调用abort报警。
int a;
char str[50];
printf("请输入一个整数值: ");
cin >> a;
assert(("a必须大于10", a > 10));
printf("输入的整数是: %d\n", a);
printf("请输入字符串: ");
cin >> str;
assert(str != NULL);
printf("输入的字符串是: %s\n", str);
如果我们需要在判断某个条件时,额外加一些提示语,可以使用上面第一个assert处的方式,即
assert(("a必须大于10", a > 10));
或者
assert(a > 10 && "a必须大于10");
结果如下图:
assert注意事项
1)在函数开始处检查传入参数的合法性;
2)每个assert只检验一个条件,同时检验多个条件时,若断言失败,无法直接定位错误;
3)不能使用改变环境的语句,因为assert仅在debug阶段生效,如果这么做,会使程序在真正运行时出错;
4)assert和后面的语句空一行,以形成视觉上的一致感;
5)有的地方,assert不能代替条件过滤;
assert使用原则
1)使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况之间的区别,后者是必然存在的并且是一定要作出处理的。
2)使用assert对函数参数进行确认。
assert禁止使用
assert 只有在 Debug 版本中才有效,如果编译为 Release 版本则被忽略。
如果不想使用assert了,可以在#include
语句之前,插入#define NDEBUG
,就可以禁用assert了。