零库存品牌童装杭州网站建设,福田公司总部大厦,沈阳自助建站模板,个人业务网站后台参考#xff1a;https://www.runoob.com/w3cnote/c-assert.html 目录作用总结与注意事项Demo作用
assert 是个宏#xff0c;并且作用并非报错。
assert() 的用法像是一种契约式编程#xff0c;程序满足我的假设条件#xff0c;才能正常良好的运作… 参考https://www.runoob.com/w3cnote/c-assert.html 目录作用总结与注意事项Demo作用
assert 是个宏并且作用并非报错。
assert() 的用法像是一种契约式编程程序满足我的假设条件才能正常良好的运作其实就相当于一个 if 语句
if(假设成立)
{程序正常运行
}
else
{报错终止程序避免由程序运行引起更大的错误
}但是这样写的话就会有无数个 if 语句并且大多数情况下我们要进行验证的假设只是属于偶然性事件又或者我们仅仅想测试一下一些最坏情况是否发生所以这里有了 assert()。
#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 缓冲区新长度
//返回值:缓冲区当前长度
//说明:保持原信息内容不变 nNewSize0表示清除缓冲区
assert(nNewSize 0);
assert(nNewSize MAX_BUFFER_SIZE); ...
}2)每个assert只检验一个条件因为同时检验多个条件时如果断言失败无法直观的判断是哪个条件失败
不好:
assert(nOffset0 nOffsetnSizem_nInfomationSize); 好:
assert(nOffset 0);
assert(nOffsetnSize m_nInfomationSize); 3)不能使用改变环境的语句因为assert只在DEBUG个生效如果这么做会使用程序在真正运行时遇到问题
错误: assert(i 100)这是因为如果出错比如在执行之前i100那么这条语句就不会执行那么i这条命令就没有执行。
正确:
assert(i 100)
i; ASSERT()是一个调试程序时经常使用的宏在程序运行时它计算括号内的表达式如果表达式为FALSE (0), 程序将报告错误并终止执行。如果表达式不为0则继续执行后面的语句。这个宏通常原来判断程序中是否出现了明显非法的数据如果出现了终止程序以免导致严重后果同时也便于查找错误。
ASSERT 只有在 Debug 版本中才有效如果编译为 Release 版本则被忽略。
Demo
1满足假设条件正常运行 2不满足假设条件先向 stderr 打印一条出错信息然后通过调用 abort 来终止程序运行