断言
断言可以对在系统中隐藏很深,用其它手段极难发现的问题进行定位,并且输出信息很详细,可以很好地解决大多数C语言编译器错误信息输出不详细的问题。
断言是对某种条件进行检测,若条件成立则无反应,否则程序执行到断言处终止,同时输出为成立的条件。
asrt是一个宏定义,并不是函数。
如
#include <asrt.h>//asrt所在头文件
void main()
{
int i = 9;
asrt(i == 0);
}
则程序输出如下:
Asrtion failed!
Program: E:C _asrt.exeFile: E:C _asrt.c, Line 8Expression: i == 0
This application has requested the Runtime to terminate it in an unPlea contact the application's support team for more information.
经常调用断言,会极大地增加程序的开销,可以通过以下方法使断言机制,使只在debug下,使用断言机制。
这种情况下,不要包含头文件 asrt.h
#ifndef NDEBUG
#define asrt(exp) ((void)0)#el#define asrt(exp) (void)( (exp) || (_asrt(#exp, __FILE__, __LINE__), 0) )
在没有定义 NDEBUG下,asrt被定义为 (void)0,无意义语句,而且对程序没有什么影响。
在定义NDEBUG时,断言会输出 不成立的条件 和 语句所在文件和行,所以我们可以在debug时,在上述代码之前,定义 NDEBUG ,在程序作为成品交出时, 删除NDEBUG的宏定义。
使用原则一个断言只能检测一个条件。 断言检查只是辅助条件,不能替代条件检测 不能使用改变环境语句的使用。频繁使用断言也会降低效率。并且它的强制停止所以不适合嵌入式程序和服务器,但也可以改写只报错误而不停止,即不调用abort()。不要浪费别人的时间—详细说明不清楚的断言;消除所做的隐式假定,或者利用断言检查其正确性例如:有时候我们会不自觉的认为一个字节占8位,或者说一个long型占据4个字节,这些都是对编译程序或操作系统做的一些假定。这使得我们需要在程序中使用断言例如ASSERT(sizeof(long)==4&&CHAR_BIT==8)。断言是进行调试检查的简单方法。要使用断言来检查绝对不应该发生的非法情况,不要混淆非法情况和错误情况,错误情况是需要在最终产品中处理的。利用断言对函数的参数进行确认,并且当程序员使用了无定义特性时向程序员报警。当编写函数时,应反复问自己做了哪些假定,一旦确定了相应的假定,就要使用断言对所做的假定进行检验,或者重新编写代码去除假定。最后初学者有什么不懂的可以私信我,需要系统学习资料和系统学习框架图的同学,可关注小编头条号,欢迎留言评论和私信小编。【私信方法】文章上方处点击“作者头像”,进入作者首页,在作者主页上方点击“关注”旁边的“发私信”即可。私信内容:学习帮助。
喜欢小编的文章的朋友可以关注、收藏、转发、留言。祝大家阅读愉快!!
本文发布于:2023-02-28 20:14:00,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/167766445082272.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:debug assertion failed(debug assertion failed怎么解决mfc).doc
本文 PDF 下载地址:debug assertion failed(debug assertion failed怎么解决mfc).pdf
留言与评论(共有 0 条评论) |