Login
升级VIP 登录 注册 安全退出
当前位置: 首页 > word文档 > 其他文档 > ASSERT和if用法浅谈,python assert用法

ASSERT和if用法浅谈,python assert用法

收藏

本作品内容为ASSERT和if用法浅谈,格式为 doc ,大小 30208 KB ,页数为 2页

ASSERT和if用法浅谈


('ASSERT和if用法浅谈ASSERT和if在刚开始学习代码的时候,对于程序中检查程序有效性时用到的ASSERT和if感到非常困惑。因为在我所看的任何一个模块中都会有许许多多的ASSERT和if出现,但是对于这些地方为什么要这么用,我却不明白,但是通过看代码发现在多数的malloc函数后面对指针进行的操作都是用ASSERT进行检查的,于是我就以为在malloc之后对申请空间的检测是用assert进行的,但是在看到后面也会出现用if对malloc进行判断并处理,才意识到自己当时的认识是错误的,于是就决定查下资料好好了解一下Assert。Assert断言(assert)的语义如下:如果表达式的值为0(假),则输出错误消息并终止程序的执行(一般还会出现提示对话框,说明在什么地方引发了assert);如果表达式为真,则不进行任何操作。因此断言失败就表明程序存在一个bug。要注意assert语句仅仅在debug版本中才有效,而在release版本中无效,其面对的是程序员而不是用户。Assert.是用来发现运行时刻的错误,发现的错误是关于程序实现方面的。使用断言最根本的好处是自动发现许多运行时产生的错误,但断言不能发现所有错误。使用断言的最大好处在于,能在更解决错误的发源地的地方发现错误。以便程序员很快的找到错误并对其做出处理。Assert一般用与检查函数参数的合法性(有效性)而不是正确性,但是合法的程序并不见得就是正确的程序。参数为NULL或者没有进行初始化,这些都会导致程序不能正常运行的非法情况。使用assert的目的是捕捉在运行时不应该发生的非法情况。不要混淆非法情况与错误情况之间的区别,前者是程序员不愿意看到的会导致程序不能正常运行的情况;后者是程序运行过程中自然存在的并且是一定要主动做出处理的情况。比如说对于一个磨面粉的机器来说,出现了异常没有磨出面粉,第一种情况是磨面机由于电动机出现问题,使得电源关闭没有出面粉;另一种情况是我们装入的原料是玉米而不是麦子,这样我们同样得不到面粉。当然第一种情况是谁都不愿意看到的一旦其发生会引起面粉机异常(终止),而第二种情况我们做一些操作就是可以处理的。举例1:boolfun(ptypep){ASSERT(p);……}上面的ASSERT是用来检验p指针的合法性,也就是说p不为空的时候程序才得以正常的运行,否则将会带来灾难性的问题(程序异常崩溃)。当程序异常崩溃时打印出ASSERT(p)所在文件名和行号,方便程序员定位故障。如果把此处改为if语句对p进行判断的话,由于p必须不为NULL时才能正确运行,所以程序可能暂时不会出错,但是运行到一定的步骤还会出问题,而此时就加大了程序员定位错误的难度。举例2;voidfun(){intp=(int)malloc(sizeof(int));ASSERT(p);}这里是断言的一个错误用法,p为一个申请了内存的指针,内存申请的过程有可能成功亦有可能失败是很正常的事,不可将其视为合法性来检测,故应该如下修改:ASSERT(p)替换为:if(p==NULL){retrun;}这样对这个异常情况做下相应处理即可。而并不是滥用ASSERT.以上只是个人在学习中的一些浅显的认识,欢迎看客们批评指正。',)


  • 编号:1700759151
  • 分类:其他文档
  • 软件: wps,office word
  • 大小:2页
  • 格式:docx
  • 风格:商务
  • PPT页数:30208 KB
  • 标签:

广告位推荐

相关其他文档更多>