C语言-断言

1 作用:

  断言常做语言处理的高级形式,自动处理软件隐藏很深其且它手段不易发现的错误,快速进行异常定位。同时这也是软件单元测试必须的技术。

2 使用范围:

  2.1放在函数入口对入口参数进行合法性检查(这也是我们经常看到的)

  2.1将assert(0)放在预计正常情况不会出现的地方(一旦出现肯定是异常出错了)

  2.3放在前置条件必须满足、后置条件必须满足、不变条件必须满足的场合

3 使用原则:

  3.1一个断言只能检测一个条件。

  3.2 断言检查只是辅助条件,不能替代条件检测

  3.3 不能使用改变环境语句的使用。

  

C语言-断言

时间: 2024-10-06 06:31:19

C语言-断言的相关文章

C语言 断言 总结

转载: http://wenda.so.com/q/1378817559065638?src=140 assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行.库函数: assert.h原型定义: void assert( int expression );assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行. 例程:#include <st

NSAssert和NSParameterAssert

2016.05.05 18:34* 字数 861 阅读 5127评论 0喜欢 17 https://www.jianshu.com/p/3072e174554f NSAssert和NSParameterAssert在开发环境中经常被使用,调试和验证代码参数的完整性,断言为真,则表明程序运行正常,而断言为假,则意味着它已经在代码中发现了意料之外的错误.xCode中的断言在Debug模式默认是开启的,Realse版本中是禁用的. 基础断言 基础类库中了两种断言,NSAssert和NSParamete

GO语言总结(5)——类型转换和类型断言

上一篇博客介绍了Go语言的数组和切片——GO语言总结(4)——映射(Map),本篇博客介绍Go语言的类型转换和类型断言 由于Go语言不允许隐式类型转换.而类型转换和类型断言的本质,就是把一个类型转换到另一个类型. 一.类型转换 (1).语法:<结果类型> := <目标类型> ( <表达式> ) (2).类型转换是用来在不同但相互兼容的类型之间的相互转换的方式,所以,当类型不兼容的时候,是无法转换的.如下: func test4() { var var1 int = 7

编程精粹--编写高质量C语言代码(3):自己设计并使用断言(二)

接着上一遍文章<<编程精粹--编写高质量C语言代码(2):自己设计并使用断言(一)>>,继续学习如何自己设计并使用断言,来更加容易,更加不费力地自动寻找出程序中的错误. 首先看一个简单的压缩还原程序: byte* pbExpand(byte *pbFrom,byte *pbTo,size_t sizeFrom) { byte b, *bpEnd; size_t size; pbEnd=pbFrom+sizeFrom; while(pbFrom<pbEnd) { b=*pbFr

go语言笔记——是c开发的 lex yacc进行词法和语法分析,go不支持函数和运算符重载,不支持类型继承,也不支持断言,还有泛型

从 Go 1.0.3 版本开始,不再使用 8g,8l 之类的指令进行程序的构建,取而代之的是统一的 go build 和 go install 等命令,而这些指令会自动调用相关的编译器或链接器. 如果你想获得更深层次的信息,你可以在目录 $GOROOT/src/cmd 下找到编译器和链接器的源代码.Go 语言本身是由 C 语言开发的,而不是 Go 语言(Go 1.5 开始自举).词法分析程序是 GNU bison,语法分析程序是名为 $GOROOT/src/cmd/gc/go.y 的 yacc

编程精粹--编写高质量的C语言代码(2):自己设计并使用断言(一)

上一篇文章<<编程精粹--编写高质量C语言代码(1):假想编译程序>>中讲述了如何利用编译程序的所有警告设施以及lint程序等来更加容易地自动发现程序中的错误.但是即使使用编译程序提供的所有警告设施,编译程序所发现的错误,也只是程序错误中的一小部分.例如以下一行代码: strCopy=memecpy(malloc(length),str,length)); 当malloc 调用失败时,返回一个空指针,而memcpy如果没有处理空指针,程序就会出现错误.编译程序是无法查出这种或其他类

c语言静态断言-定义自己的静态断言

c语言里面可以自己定义静态断言,更加方便的调试代码. 使用静态断言 1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<assert.h> 4 5 void main() 6 { 7 int num = 30; 8 assert(num < 20); //num<20 就是正常,否则异常 9 printf("%d",num); 10 } 用自己定义的静态断言来实现 1 #include&

C语言中断言ASSERT

我一直以为assert仅仅是个报错函数,事实上,它居然是个宏,并且作用并非"报错". 在经过对其进行一定了解之后,对其作用及用法有了一定的了解,assert()的用法像是一种"契约式编程",在我的理解中,其表达的意思就是,程序在我的假设条件下,能够正常良好的运作,其实就相当于一个if语句: if(假设成立) { 程序正常运行: } else { 报错&&终止程序!(避免由程序运行引起更大的错误) } 但是这样写的话,就会有无数个if语句,甚至会出现,

C语言异常与断言接口与实现

程序中通常会出现三种错误:用户错误.运行期错误以及异常 标准库函数setjmp和longjmp 在C语言中,标准库函数setjmp和longjmp形成了结构化异常工具的基础.简单的说就是setjmp实例化处理程序,而longjmp产生异常 setjmp和longjmp是C语言所独有的,它们部分弥补了C语言有限的转移能力.与刺激的abort()和exit()相比,goto语句看起来是处理异常的更可行方案.不幸的是,goto是本地的:它只能跳到所在函数内部的标号上,而不能将控制权转移到所在程序的任意