assert用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了assert用法相关的知识,希望对你有一定的参考价值。
我们公司的交换机程序里(C编写)有assert的语句,用来检查值是否为0,师傅说,如果为0,进程会死掉。但该语句出现在命令界面的进程里,死掉必然导致系统没有响应。
虽然说这个值为0一定不可能发生,但是它写这句话用意是什么呢?为什么要让一种可能使系统崩溃的情况存在?
还有就是用assert来检查值和用if来判断并返回错误标记各有什么好处
debug时,出错了则说明你考虑不周,前面有错,主要是用于的排除错误。
release时,assert不起作用。 参考技术A assert主要用于程序的测试阶段,在发行版程序中,可以通过定义NDEBUG宏的办法关闭assert
当assert测试不满足条件时,程序会中断并退出,同时给出中断提示信息。
当if测试不满足条件时,会继续执行后面的语句,不会中断程序。 参考技术B 凡是响应assert
说明异常
所以要做的
不是避免assert产生的闪退
而是根据每个闪退的点
避免出现assert失败的情况。
assert()函数用法
assert是定义在头文件cassert中的宏
其作用是如果他的返回值不为真则终止程序。
assert(expression);
if 为假,先向stderr打印一条错误信息,再用abort终止程序
缺点:频繁调用影响程序性能,增加程序开销。
可在调用cassert后,用#define NDEBUG来禁用assert
每个assert只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败
不能使用改变环境的语句,因为assert只在DEBUG个生效,如果这么做,会使用程序在真正运行时遇到问题
有的地方,assert不能代替条件过滤
以上是关于assert用法的主要内容,如果未能解决你的问题,请参考以下文章