函数assert()详解:
断言assert是一个宏,该宏在<assert>中,,当使用assert时候,给他个参数,即一个判读为真的表达式。预处理器产生测试该断言的代码,如果断言不为真,则发出一个错误信息告诉断言是什么以及它失败一会,程序会终止。
我们一般可以用在判断某件操作是否成功上。
摘录林锐博士高质量编程一书中相关内容。
~~~~~~~~~~~~~~~~~~~~
程序一般分为Debug版本和Release版本,Debug版本用于内部调试,Release版本发行给用户使用。
断言assert是仅在Debug版本起作用的宏,它用于检查“不应该”发生的情况。以下是一个内存复制程序,在运行过程中,如果assert的参数为假,那么程序就会中止(一般地还会出现提示对话,说明在什么地方引发了assert)。
//复制不重叠的内存块
void memcpy(void *pvTo, void *pvFrom, size_t size)
{
void pbTo = (byte ) pvTo;
void pbFrom = (byte ) pvFrom;
assert( pvTo != NULL && pvFrom != NULL );
while(size - - > 0 )
*pbTo + + = *pbFrom + + ;
return (pvTo);
}
assert不是一个仓促拼凑起来的宏,为了不在程序的Debug版本和Release版本引起差别,assert不应该产生任何副作用。所以assert不是函数,而是宏。程序员可以把assert看成一个在任何系统状态下都可以安全使用的无害测试手段。
以下是使用断言的几个原则:
1)使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况之间的区别,后者是必然存在的并且是一定要作出处理的。
2)使用断言对函数的参数进行确认。
3)在编写函数时,要进行反复的考查,并且自问:“我打算做哪些假定?”一旦确定了的假定,就要使用断言对假定进行检查。
4)一般教科书都鼓励程序员们进行防错性的程序设计,但要记住这种编程风格会隐瞒错误。当进行防错性编程时,如果“不可能发生”的事情的确发生了,则要使用断言进行报警。

参考来源:
https://zhidao.baidu.com/question/201080430.html

函数assert()详解相关推荐

  1. python getopt_python 5种 statsPython中的getopt函数使用详解

    函数原型: getopt.getopt(args, shortopts, longopts=[]) 参数解释: args:args为需要解析的参数列表.一般使用sys.argv[1:],这样可以过滤掉 ...

  2. C语言 -- string.h中函数功能详解与手动实现 - 02(常用函数memcpy、memmove、strcpy、strdup、strcat、strtok...)

    内容预览 3.5.搬迁类型 --- 函数功能详细说明 :将内存空间中内容移动.复制到另一内存空间 3.6.搬迁类型 --- 函数功能测试与手动实现 3.6.1.memcpy.memccpy 3.6.2 ...

  3. ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多)

    ROW_NUMBER() OVER()函数用法详解 (分组排序 例子多) https://blog.csdn.net/qq_25221835/article/details/82762416 post ...

  4. R语言tidyr包gather()函数实战详解:数据收缩、从宽表到窄表

    R语言tidyr包gather()函数实战详解:数据收缩.从宽表到窄表 目录 R语言tidyr包gather()函数实战详解:数据收缩.从宽表到窄表 收缩两列数据

  5. R语言tidyr包spread()函数实战详解:数据裂变、从窄表到宽表

    R语言tidyr包spread()函数实战详解:数据裂变.从窄表到宽表 目录 R语言tidyr包spread()函数实战详解:数据裂变.从窄表到宽表

  6. R语言tidyr包Unite()函数实战详解:多个数据列合并为一列

    R语言tidyr包Unite()函数实战详解:多个数据列合并为一列 目录 R语言tidyr包Unite()函数实战详解:多个数据列合并为一列

  7. R语言tidyr包separate()函数实战详解:一列裂变为多列

    R语言tidyr包separate()函数实战详解:一列裂变为多列 目录 R语言tidyr包separate()函数实战详解:一列裂变为多列 一列裂变为两列

  8. C++中substr()函数用法详解

    C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...

  9. LayoutInflater的inflate函数用法详解

    LayoutInflater的inflate函数用法详解 LayoutInflater作用是将layout的xml布局文件实例化为View类对象. 获取LayoutInflater的方法有如下三种: ...

  10. python中subplot是什么意思_python matplotlib中的subplot函数使用详解

    python里面的matplotlib.pylot是大家比较常用的,功能也还不错的一个包.基本框架比较简单,但是做一个功能完善且比较好看整洁的图,免不了要网上查找一些函数.于是,为了节省时间,可以一劳 ...

最新文章

  1. Nginx负载均衡之TCP端口高可用(二)
  2. 如何重构“箭头型”代码
  3. 【网络】TCP基础总结
  4. @Data 注解对类静态字段, 无效
  5. Android 控件布局常用属性
  6. 处理selinux方法
  7. Taran 缩点【bzoj1529】[POI2005]ska Piggy banks
  8. android tible控件_android自定义表单,表格控件TableRowTextView
  9. Java 8 map(),flatMap()示例
  10. java 如何让循环结束,跳过某个条件,跳出当前的多重嵌套循环
  11. 在计算机网络中发送电子邮件遵循的协议是,一、计算机网络刷题
  12. python深拷贝_python 深拷贝与浅拷贝的区别
  13. 云计算实战系列十二(Linux系统优化)
  14. 苹果手机mov文件如何复制到电脑_如何在手机上访问电脑上的文件(超详细步骤) iPhone版...
  15. matlab s函数模板,MATLAB第5章S函数.ppt
  16. PuTTY 私钥'putty/sshdss.c' 多个信息泄露漏洞
  17. Linux_MySQL下(4) 未整理
  18. 对抗机器学习—— 迭代FGSM
  19. 微信带参二维码数据解析
  20. python 自动发送微信消息 (win)

热门文章

  1. 认知智能再突破,阿里 18 篇论文入选 AI 顶会 KDD
  2. 如何用Neo4j和Scikit-Learn做机器学习任务?| 附超详细分步教程
  3. 全球首个软硬件推理平台 :NVDLA编译器正式开源
  4. MediaPipe:Google Research 开源的跨平台多媒体机器学习模型应用框架
  5. 自动驾驶行业观察 | 停车不再难,L2到L4的泊车辅助系统技术剖析
  6. AI黑科技:呵护地球,我们是认真的
  7. Arm 发布Mali多媒体套件,机器学习将不再是高端手机的专享
  8. IntelliJ IDEA 2021.3.2 发布:告别不断建议安装xx插件的提示!
  9. 聊一聊如何优雅地向程序员提问题
  10. Spring Boot第四篇:SpringBoot 整合JPA