C语言中断言ASSERT |
您所在的位置:网站首页 › 宁波北仑政务服务网 › C语言中断言ASSERT |
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 的缺点是,频繁的调⽤会极⼤的影响程序的性能,增加额外的开销。
在调试结束后,可以通过在包含 #include 的语句之前插⼊ #define NDEBUG 来禁⽤ assert 调⽤,⽰例代码如下:
#include #define NDEBUG #include ⽤法总结与注意事项:
1) 在函数开始处检验传⼊参数的合法性
如 : int resetBufferSize(int nNewSize) { // 功能 : 改变缓冲区⼤⼩ , // 参数 :nNewSize 缓冲区新长度
// 返回值 : 缓冲区当前长度
// 说明 : 保持原信息内容不变 nNewSize= 0); assert(nNewSize |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |