assert的用法及注意事项有哪些

本文主要介绍“断言的用法和注意事项有哪些” 。在日常操作中,相信很多人对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的用法及注意事项有哪些】以下是使用断言的几个原则:

    推荐阅读