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

技术assert的用法及注意事项有哪些这篇文章主要介绍“assert的用法及注意事项有哪些”,在日常操作中,相信很多人在assert的用法及注意事项有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望

本文主要介绍“断言的用法和注意事项有哪些”。在日常操作中,相信很多人对assert的用法和注意事项有所怀疑。边肖查阅了各种资料,整理出简单易用的操作方法,希望能帮助大家解答“assert有哪些用法和注意事项”的疑惑!接下来,请和边肖一起学习!

assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。assert的用法及注意事项有哪些

我一直认为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)。

以下是使用断言的几个原则:

  1. 使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况之间的区别,后者是必然存在的并且是一定要作出处理的。

  2. 使用断言对函数的参数进行确认。

  3. 在编写函数时,要进行反复的考查,并且自问:"我打算做哪些假定?"一旦确定了的假定,就要使用断言对假定进行检查。

  4. 一般教科书都鼓励程序员们进行防错性的程序设计,但要记住这种编程风格会隐瞒错误。当进行防错性编程时,如果"不可能发生"的事情的确发生了,则要使用断言进行报警。

ASSERT ()是一个调试程序时经常使用的宏,在程序运行时它计算括号内的表达式,如果表达式为FALSE (0), 程序将报告错误,并终止执行。如果表达式不为0,则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据,如果出现了终止程序以免导致严重后果,同时也便于查找错误。

ASSERT 只有在 Debug 版本中才有效,如果编译为 Release 版本则被忽略。

到此,关于“assert的用法及注意事项有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/66407.html

(0)

相关推荐

  • 为何建议关闭RocketMQ预热配置

    技术为何建议关闭RocketMQ预热配置这期内容当中小编将会给大家带来有关为何建议关闭RocketMQ预热配置,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言RocketMQ提供了一

    攻略 2021年11月17日
  • 选择优秀物联网数据库的5个步骤分别是什么

    技术选择优秀物联网数据库的5个步骤分别是什么选择优秀物联网数据库的5个步骤分别是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。要选择最佳的物联网数据

    攻略 2021年12月2日
  • Nginx $remoteaddr和$proxyaddxforwardedfor变量详解

    技术Nginx $remoteaddr和$proxyaddxforwardedfor变量详解 Nginx $remote_addr和$proxy_add_x_forwarded_for变量详解$re

    礼包 2021年11月5日
  • Hive常用查询命令和使用方法

    技术Hive常用查询命令和使用方法这期内容当中小编将会给大家带来有关Hive常用查询命令和使用方法,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 将日志文件传到HDFS ```ba

    攻略 2021年11月11日
  • 如何将Linux上的PDB数据库转移到windows上的CDB数据库

    技术怎么将Linux上的PDB数据库传输到windows的CDB数据库本篇内容主要讲解“怎么将Linux上的PDB数据库传输到windows的CDB数据库”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。

    攻略 2021年12月21日
  • pulsar消息可靠性(pulsar原理)

    技术Pulsar的特性与优势有哪些这篇文章主要介绍“Pulsar的特性与优势有哪些”,在日常操作中,相信很多人在Pulsar的特性与优势有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”

    攻略 2021年12月15日