断言函数assert

我一直以为 assert 仅仅是个报错函数,事实上,它居然是个宏,并且作用并非"报错"。

在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert() 的用法像是一种"契约式编程",在我的理解中,其表达的意思就是,程序在我的假设条件下,能够正常良好的运作,其实就相当于一个 if 语句:

if(假设成立)

{

程序正常运行;

}

else

{

报错&&终止程序!(避免由程序运行引起更大的错误)

}

但是这样写的话,就会有无数个 if 语句,甚至会出现,一个 if 语句的括号从文件头到文件尾,并且大多数情况下,我们要进行验证的假设,只是属于偶然性事件,又或者我们仅仅想测试一下,一些最坏情况是否发生,所以这里有了 assert()。

assert 宏的原型定义在 assert.h 中,其作用是如果它的条件返回错误,则终止程序执行。

#include "assert.h"

void assert( int expression );

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

使用 assert 的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。

C语言_断言函数assert相关推荐

  1. C语言学习笔记---断言函数assert()

      在C语言库函数中提供了一个辅助调试程序的小型库,它是由assert()宏组成,接收一个整形表达式作为参数.如果表达式的值为假(非零),则assert()宏就在标准错误流(stderr)中写入一条错 ...

  2. C语言_钩子函数(回调函数)

    目录 1.引言 2.变量指针 3.函数指针 4.钩子函数作用 5.钩子函数使用 6.带参数的钩子函数 7 stm32 CubeMx 定时器回调函数的实现 1.引言 钩子函数.回调函数.注册函数,挂钩子 ...

  3. C语言_宏函数_换行符

    在写代码时,发现很多代码重复,为了缩减代码及利于代码维护,将重复的代码通过宏函数的方式进行定义. 简单地将重复代码拷贝出来,通过宏定义封装了一下:因为多行代码,通过换行符进行了规范.使用了宏函数之后发 ...

  4. matlab语言中的assert断言函数

    1.MATLAB语言没有系统的断言函数,但有错误报告函数 error 和 warning.由于要求对参数的保护,需要对输入参数或处理过程中的一些状态进行判断,判断程序能否/是否需要继续执行.在matl ...

  5. 解决matlab 关于警告(warning)、错误(error)、异常(exception)与断言(assert)问题总结

    在使用matlab中难免会遇到警告(warning).错误(error).异常(exception)与断言(assert)等问题,那如何解决呢??? 本文将从警告(warning).错误(error) ...

  6. php断言什么意思,一起学习PHP中断言函数的使用

    一起学习PHP中断言函数的使用 原来一直以为断言相关的函数是 PHPUnit 这些单元测试组件提供的,在阅读手册后才发现,这个 assert() 断言函数是 PHP 本身就自带的一个函数.也就是说,我 ...

  7. 第十二章 C语言调试_assert断言函数

    在我们的实际开发过程之中,常常会出现一些隐藏得很深的BUG,或者是一些概率性发生的BUG,通常这些BUG在我们调试的过程中不会出现很明显的问题,但是如果我们将其发布,在用户的各种运行环境下,这些程序可 ...

  8. c语言中assert函数,C++ 中assert断言函数的基本用法

    在我们的实际开发过程之中,常常会出现一些隐藏得很深的BUG,或者是一些概率性发生的BUG,通常这些BUG在我们调试的过程中不会出现很明显的问题,但是如果我们将其发布,在用户的各种运行环境下,这些程序可 ...

  9. Python assert断言函数及用法

    Python assert断言函数及用法 Python assert 语句,又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行:反之,Pyt ...

最新文章

  1. bootstrap的栅格布局与两列布局结合使用
  2. 日产ftt传感器是什么_日产将发布最牛自动驾驶:选最棒的陪驾,走最快的车道...
  3. python调用报表制作工具_使用Python轻松制作漂亮的表格
  4. 悖论:早期互联网项目,是否需要技术含量?
  5. nodejs 代替python_Python/NodeJS坑记
  6. (三)Clang/ LLVM编译流程简述
  7. php三级实例,三级联动实例
  8. 计算机通识/14:算法常识/算法常识-01
  9. C++对输入流输出流运算符的重载【案例】
  10. 如何监控impala的数据_impala数据库的函数
  11. 【java学习之路】(javaWeb【后端】篇)005.会话
  12. 13.C++ vector 操作
  13. Spark源码分析之一:Job提交运行总流程概述
  14. 人脉网中应该具备的10种人
  15. html怎么做出相框的效果,纯CSS实现的相框效果
  16. Python打包exe,以及解决闪退
  17. 135编辑器代码是html吗,不会代码,你也能做背景样式!!!
  18. 【专访】黄健宏:为什么真正的聪明人喜欢用笨方法?
  19. mysql主从延迟时间是多少_MySQL主从同步个般是多久的延迟?
  20. obs 推流编码在哪设置_直播软件OBS推流的设置方法

热门文章

  1. 对称加密算法AES - ECB模式
  2. 老师教我们用计算机画画就是彩虹,一年级上课文
  3. VLC-2.2.6命令行帮助文件
  4. 使用Python+selenium实例化Microsoft Edge或Chrome浏览器对象和常见的报错
  5. 深信服防火墙之安全评估与动态检测技术
  6. java json asc排序_按ASCII码给json对象排序
  7. RNA的化学修饰原理|Gal-PEG-siRNA|siRNA-S-S-DSPE|siRNA-s-s-PEG|cholesterol-siRNA
  8. JS逆向加密——B 站弹幕 protobuf 分析
  9. 百度网盘 网页版、pc版 都登陆不进去的解决方法
  10. 简介ResNet18并用其对CIFAR-10数据集进行分类