assert() debug() release()
来源:互联网 发布:金昌印花软件 编辑:程序博客网 时间:2024/06/03 21:08
assert()宏是用于保证满足某个特定条件,用法是:assert(表达式);如果表达式的值为假,整个程序将退出,并输出一条错误信息。如果表达式的值为真则继续执行后面的语句。使用这个宏前需要包含头文件assert.h例如#include <stdio.h>#include <assert.h>void main(){ float a,b; scan("%f %f",&a,&b); assert(b!=0); printf("%f\n",a/b);}以上的程序要计算A/B的值,因此要求b!=0,所以在程序中使用了assert()用于确保b!=0,如果b==0,则程序会退出。上面解释的更加简单些
断言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)一般教科书都鼓励程序员们进行防错性的程序设计,但要记住这种编程风格会隐瞒错误。当进行防错性编程时,如果“不可能发生”的事情的确发生了,则要使用断言进行报警。
- assert() debug() release()
- assert在debug 和 release版本中的区别
- 关于assert函数在debug 和release下的问题
- assert在debug和release中的有效与失效
- 断言assert在debug版本与release版本中的区别
- 用程序判断设置的是debug还是release以及assert在debug和release版本中的不同行为
- release debug
- MFC中DUBUG模式没有出错,转换到Release下报Debug Assert Access Error 解决方法
- Debug 与 Release、Release调试
- debug 和 release
- 深入浅出Debug和Release
- Debug和Release
- Debug与 Release区别
- Debug VS release
- Debug and Release
- Debug和Release简介
- Debug&Release的不同
- 转:debug and release
- JS编程技巧
- 讨厌的字符串读入
- Struts 2 数据传递
- oracle中三种方式来分析索引结构
- hdu 4771 Stealing Harry Potter's Precious (2013 杭州 onsite B题)bfs预处理后,dfs枚举或tsp
- assert() debug() release()
- ios7新特性--3
- 如何在一个字符上面加横线或者加波浪线?
- AE中调用内置方法创建菜单
- Fortran矩阵运算
- NDK报错:make: *** 没有规则可以创建“obj/local/armeabi/objs/a/a.o”需要的目标“/a.c”。 停止。
- 完全卸载MySQL 数据库——清空MySql注册表
- Excel—“撤销工作表保护密码”的破解并获取原始密码
- Struts2 的下载、安装和使用