本文主要介绍“断言的用法和注意事项有哪些”。在日常操作中,相信很多人对assert的用法和注意事项有所怀疑。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮助大家解答“assert有哪些用法和注意事项”的疑惑!接下来,请和边肖一起学习!
assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。
我一直认为assert只是一个错误报告功能,但实际上,它实际上是一个宏,它的功能不是报告错误。
对它有了一定的了解之后,我对它的功能和用法也有了一定的了解。assert()的用法类似于一种“契约式编程”。在我的理解中,这意味着程序可以在我假设的条件下正常良好地运行,这实际上相当于一个if语句:
如果(假设是真的)
{
程序运行正常;
}
其他
{
报错终止程序!(避免程序操作导致更大的错误)
}但如果这样写,就会有无数的if语句,甚至透着。if语句的括号从文件的开头一直延伸到文件的结尾,在大多数情况下,我们要验证的假设只是一个偶然事件,或者我们只是想测试是否发生了一些最坏的情况,所以这里是assert()。
assert宏的原型在assert.h中定义,它的功能是在条件返回错误时终止程序执行。
#包含“assert.h”
void assert(int expression);assert的功能是现在计算表达式表达式。如果其值为false(即0),它首先向stderr打印一条错误消息,然后通过调用abort终止程序。
使用assert的缺点是频繁的调用会极大地影响程序的性能并增加额外的开销。
调试后,您可以通过在包含#include的语句之前插入# define NDEBUG来禁用断言调用。示例代码如下:
#包括
#defineNDEBUG
#包括用法总结与注意事项
1)在函数开始处检验传入参数的合法性
比如:
int setbuffersize(intnNewSize)
{
//函数:改变缓冲区大小,
//参数:nNewSize缓冲区新长度。
//返回缓冲区:的当前长度。
//说明:保持原有信息内容不变。nNewSize=0表示清除缓冲区。
assert(nNewSize=0);
assert(nNewSize=MAX _ BUFFER _ SIZE);
.
}2)每个assert只检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败
坏:
assert(nOffset=0 offset nSize=m _ ninformationsize);
好的:
assert(NOffset=0);
assert(nOffset nSize=m _ ninformationsize);3)不能使用改变环境的语句,因为assert只在DEBUG个生效,如果这么做,会使用程序在真正运行时遇到问题
错误: assert(i 100)这是因为如果在执行之前有一个错误,例如i=100,那么这个语句就不会被执行,所以I
命令没有执行。正确的:
断言(i100)
我;4)assert和后面的语句应空一行,以形成逻辑和视觉上的一致感
5)有的地方,assert不能代替条件过滤
程序一般分为Debug 版本和Release 版本,Debug 版本用于内部调试,Release 版本发行给用户使用。断言assert 是仅在Debug 版本起作用的宏,它用于检查"不应该"发生的情况。以下是一个内存复制程序,在运行过程中,如果assert 的参数为假,那么程序就会中止(一般地还会出现提示对话,说明在什么地方引发了assert)。
以下是使用断言的几个原则:
-
使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况之间的区别,后者是必然存在的并且是一定要作出处理的。
-
使用断言对函数的参数进行确认。
-
在编写函数时,要进行反复的考查,并且自问:"我打算做哪些假定?"一旦确定了的假定,就要使用断言对假定进行检查。
-
一般教科书都鼓励程序员们进行防错性的程序设计,但要记住这种编程风格会隐瞒错误。当进行防错性编程时,如果"不可能发生"的事情的确发生了,则要使用断言进行报警。
ASSERT ()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。
ASSERT 只有在 Debug 版本中才有效,如果编译为 Release 版本则被忽略。
到此,关于“assert的用法及注意事项有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/66407.html