assert的进一步分析
来源:互联网 发布:联通e是什么网络 编辑:程序博客网 时间:2024/05/22 03:29
数据结构之assert():
本质:
接受一个int类型的参数返回一个void类型的结果的函数。
用法:
#include<assert.h>
void assert(exp());//若exp()为真,则程序正常继续执行,为exp()为假,则它先向标准错误流stderr打印一条出错信息,然后通过调用系统函数来终止程序运行;(abort()函数来终止程序)。
使用断言可以创建更稳定,品质更好且不易于出错的代码。当需要在一个值为FALSE时中断操作的话,可以使用断言。
除了类型检查和单元测试外,断言还提供了一种确定各种特性是否在程序中得到维护的极好的方法。
使用断言使向按契约式设计更近了一步。
断言只有在Debug模式下才有效。
注意点:
断言的副作用是因为它修改了程序中变量的值并且未抛出错误,这样的错误如果不细心的检查是很难发现的。但是同时可以根据以上的副作用得到一个有用的特性,根据它来测试断言是否打开。(bool is Enable=false; //... assert is Enable=true;)
assert是宏,而不是函数。在C语言库文件#include<assert.h>中;
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:
#include <assert.h>
void assert( int expression );
assert的作用是先计算表达式expression,如果其值为假(即为0),那么它先向标准错误流(stderr)打印一条出错信息,然后通过调用abort来终止程序运行;否则,assert()无任何作用。宏assert()一般用于确认程序的正常操作,其中表达式构造无错时才为真值。完成调试后,不必从源代码中删除assert()语句,因为宏Debug有定义时,宏assert()的定义为空
缺点:
多次使用会导致程序的性能,会增大开销。assert()函数不能使用改变环境的语句
例:
assert(!i++);//在判断i++不为零时,应该把i++放在外面执行,因为assert只在Debug模式下起作用,在其他版本可能被注释,导致源代码评测变得困难。
本质:
接受一个int类型的参数返回一个void类型的结果的函数。
用法:
#include<assert.h>
void assert(exp());//若exp()为真,则程序正常继续执行,为exp()为假,则它先向标准错误流stderr打印一条出错信息,然后通过调用系统函数来终止程序运行;(abort()函数来终止程序)。
使用断言可以创建更稳定,品质更好且不易于出错的代码。当需要在一个值为FALSE时中断操作的话,可以使用断言。
除了类型检查和单元测试外,断言还提供了一种确定各种特性是否在程序中得到维护的极好的方法。
使用断言使向按契约式设计更近了一步。
断言只有在Debug模式下才有效。
注意点:
断言的副作用是因为它修改了程序中变量的值并且未抛出错误,这样的错误如果不细心的检查是很难发现的。但是同时可以根据以上的副作用得到一个有用的特性,根据它来测试断言是否打开。(bool is Enable=false; //... assert is Enable=true;)
assert是宏,而不是函数。在C语言库文件#include<assert.h>中;
assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:
#include <assert.h>
void assert( int expression );
assert的作用是先计算表达式expression,如果其值为假(即为0),那么它先向标准错误流(stderr)打印一条出错信息,然后通过调用abort来终止程序运行;否则,assert()无任何作用。宏assert()一般用于确认程序的正常操作,其中表达式构造无错时才为真值。完成调试后,不必从源代码中删除assert()语句,因为宏Debug有定义时,宏assert()的定义为空
缺点:
多次使用会导致程序的性能,会增大开销。assert()函数不能使用改变环境的语句
例:
assert(!i++);//在判断i++不为零时,应该把i++放在外面执行,因为assert只在Debug模式下起作用,在其他版本可能被注释,导致源代码评测变得困难。
阅读全文
0 0
- assert的进一步分析
- AutoResetEvent的进一步分析
- php assert函数的分析
- 对String对象的进一步分析
- 对那个IOCCC程序的进一步分析
- 二分查找的进一步分析(TAOCP)
- 【视频】测量GAP的进一步分析
- smarty模板进一步分析
- 进一步分析Node.js所依赖的包和特性
- 【译】性能调优之后,进一步的验证和分析
- 性能调优之后,进一步的验证和分析
- 利用tshark对网络数据包做进一步的分析
- 数据库性能调优之后,进一步的验证和分析
- 利用tshark对网络数据包做进一步的分析
- c++ assert()分析
- boost assert分析
- assert用法分析
- 进一步分析讨论线性结构
- (三)spring cloud微服务分布式云架构
- Golang
- 浅谈PHP中try{}catch{}的使用方法
- MySQL常见的三种存储引擎(InnoDB、MyISAM、MEMORY)
- UEditor显示Invalid or unexpected token
- assert的进一步分析
- 将自定义函数集成到Hive的源码
- 洛谷10月月赛R1-T1-一道中档题 Factorial
- HDU-3974 DFS序+线段树
- MYSQL日志定位性能问题
- Golang
- Perl 入门1
- 习题7-6:重叠的正方形(暴力DFS)
- 10月8日遇到的问题Could not find action or result