`
daiyuanyang
  • 浏览: 21626 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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)一般教科书都鼓励程序员们进行防错性的程序设计,但要记住这种编程风格会隐瞒错误。当进行防错性编程时,如果“不可能发生”的事情的确发生了,则要使用断言进行报警。
分享到:
评论

相关推荐

    深入探讨C++中的引用和ASSERT断言

    ### 深入探讨C++中的引用和ASSERT断言 #### 引用 **引用**是C++中的一项重要特性,它本质上是一个已存在的变量的别名。这意味着当我们通过引用访问一个变量时,实际上就是在直接操作那个变量。理解引用的工作原理...

    VC中如何使用ASSERT断言

    在本篇文章中,我们将深入探讨如何在VC中使用`assert`断言,以及它在软件开发中的作用。 `assert`宏定义在`<assert.h>`头文件中,主要用于测试假设条件。当程序运行到含有`assert`的语句时,如果表达式的值为零(即...

    python assert的用处示例详解

    使用assert断言是学习python一个非常好的习惯,python assert 断言句语格式及用法很简单。在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件时就崩溃,这时候就需要...

    业务异常提示处理 springboot+Assert(自定义断言)

    本项目“业务异常提示处理 springboot+Assert(自定义断言)”着重于利用Spring Boot的特性来构建高效、易维护的业务逻辑,并通过自定义断言提升代码的可读性和可维护性。下面我们将详细探讨这些知识点。 1. **Spring...

    Java断言(assert)

    Java断言(assert) Java断言是一种 debugging 机制,允许开发者在Java程序中添加检查点,以确保程序的正确性。断言可以在开发和测试阶段使用,以确保程序的正确性和可靠性。 Java断言的历史 Java断言是从 JDK 1.4 ...

    函数重载、assert断言1

    C++11引入了`static_assert`,这是一种编译期断言,它在编译阶段检查表达式的真值。如果表达式为假,编译器会在编译时报告错误,附带用户提供的错误消息字符串。这样可以在代码早期捕获错误,避免了运行时的额外开销...

    Python3 assert断言实现原理解析

    ### Python3 assert断言实现原理 在Python编程中,`assert`语句是一种非常有用的调试工具,它可以在开发阶段帮助开发者发现程序中的错误,并提供反馈。`assert`语句的基本用法是:如果指定的表达式计算结果为`False...

    Node.js assert断言原理与用法分析

    本文实例讲述了Node.js assert断言原理与用法。分享给大家供大家参考,具体如下: node.js官方API中文版 http://nodeapi.ucdok.com/#/api/assert.html assert 模块主要用于编写程序的单元测试时使用,通过断言可以...

    C语言断言assert的用法.pdf

    其中expression为条件表达式,如果该表达式为假(即为零),则触发assert断言错误,否则程序正常执行。通常,assert用于检查函数参数的有效性、验证逻辑运算的结果等,它通常与#ifdef DEBUG语句结合使用,使得在...

    python3 assert 断言的使用详解 (区别于python2)

    下面将详细解释Python 3中的`assert`断言以及它与Python 2的区别。 ### Python 3中的`assert`语句 `assert`语句的基本语法是: ```python assert 条件, "错误信息" ``` 这里,`条件`是你期望为真的表达式,如果...

    Python断言assert的用法代码解析

    python assert断言是声明布尔值必须为真的判定,如果发生异常就说明表达式为假。 可以理解assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会触发异常。 assert的语法格式: assert expression 它...

    1-assert(断言).pdf

    在Node.js中,`assert`模块提供了丰富的断言方法来帮助开发者确保程序的正确性。以下是对`assert`模块中各个方法的详细说明: 1. `assert(value[, message])`: 这是最基础的断言方法,它检查给定的`value`是否为真...

    STM32_UART1_DEMO

    STM32 UART1 DEMO是一个基于STM32F103C6微控制器的工程示例,主要展示了如何使用USART1(通用同步/异步收发传输器)进行串口通信,同时也集成了printf函数用于控制台输出以及assert断言功能以辅助调试。下面将详细...

    断言assert函数,C语言assert函数完全攻略.docx

    断言assert函数在C语言中被定义为宏的形式,而不是函数,其原型定义在<assert.h>文件中。 断言assert函数的原理是通过检查表达式expression的值来决定是否需要终止执行程序。如果表达式expression的值为假(即为0)...

    基于 HTTP 请求的快速数据驱动 pytest 接口自动化测试框架

    多元化断言,json 断言,sql 断言,json-schema 断言,正则断言,原生 python assert 断言。兼容 yaml / json 两种文件格式编写测试数据。测试用例自动生成,可以根据测试数据文件自动生成测试用例。自动测试报告,...

Global site tag (gtag.js) - Google Analytics