linux系统下使用assert函数的方法。下面是小编精心收集的资料供大家参考!
步骤如下assert宏的原型定义在《assert.h》中其作用是如果它的条件返回错误则终止程序执行原型定义
#include 《assert.h》
1
void assert( int expression);assert的作用是现计算表达式expression 如果其值为假(即为0)那么它先向stde rr打印一条出错信息
然后通过调用abort来终止程序运行。
请看下面的程序清单ba dpt r.c
#include 《stdio.h》
#include 《assert.h》
#include 《stdlib.h》
2
int main(void)
{
FILE*fp;fp=fope n(test.txt w);//以可写的方式打开一个文件如果不存在就创建一个同名文件assert(fp); //所以这里不会出错fc lo s e(fp);fp=fo pen(noexitfile.txt r);//以只读的方式打开一个文件如果不存在就打开文件失败
3
assert(fp); //所以这里出错fc lo s e(fp); //程序永远都执行不到这里来return 0;
}
[root@localhost error_process]#gcc badptr.c
[root@localhost erro r_process]# 。 /a.outa.out badptr.c:14 main Asse rtio n `fp‘faile d.
4
已放弃
使用assert的缺点是频繁的调用会极大的影响程序的性能增加额外的开销。
在调试结束后可以通过在包含#include 《assert.h》的语句之前插入#define NDEBUG来禁用assert调用示例代码如下
#include 《stdio.h》
#define NDEBUG
#include 《assert.h》
5
用法总结与注意事项
1)在函数开始处检验传入参数的合法性如int resetBuffe rSize(int nNewSize)
{
//功能改变缓冲区大小
//参数 nNewSize缓冲区新长度
6
//返回值缓冲区当前长度
//说明保持原信息内容不变nNewSize 《=0表示清除缓冲区assert(nNewSize 》 =0);assert(nNewSize 《=MAX_BUFFER_SIZE);
。 。 。
}
2)每个assert只检验一个条件 因为同时检验多个条件时如果断言失败无法直观的判断是哪个条件失败
7
不好 assert(nOffset》=0&&nOffset+nS ize
《=m_nInfomationSize);
好 assert(nOffset 》 =0);assert(nOffset+nSize 《=m_nInfomationSize);
3)不能使用改变环境的语句 因为assert只在DEBUG个生效如果这么做会使用程序在真正运行时遇到问题
错误 assert(i++ 《 100)
这是因为如果出错 比如在执行之前i=100那么这条语句就不会执行那么i++这条命令就没有执行。
8
正确 assert(i 《 100)i++;
4)assert和后面的语句应空一行 以形成逻辑和视觉上的一致感
5)有的地方 assert不能代替条件过滤
9
最近主机参考拿到了一台恒创科技的美国VPS云服务器测试机器,那具体恒创科技美国云服务器性能到底怎么样呢?主机参考进行了一番VPS测评,大家可以参考一下,总体来说还是非常不错的,是值得购买的。非常适用于稳定建站业务需求。恒创科技服务器怎么样?恒创科技服务器好不好?henghost怎么样?henghost值不值得购买?SonderCloud服务器好不好?恒创科技henghost值不值得购买?恒创科技是...
sharktech怎么样?sharktech鲨鱼机房(Sharktech)我们也叫它SK机房,是一家成立于2003年的老牌国外主机商,提供的产品包括独立服务器租用、VPS主机等,自营机房在美国洛杉矶、丹佛、芝加哥和荷兰阿姆斯特丹等,主打高防产品,独立服务器免费提供60Gbps/48Mpps攻击防御。机房提供1-10Gbps带宽不限流量服务器,最低丹佛/荷兰机房每月49美元起,洛杉矶机房最低59美元...
这次RackNerd商家提供的美国大硬盘独立服务器,数据中心位于洛杉矶multacom,可选Windows、Linux镜像系统,默认内存是64GB,也可升级至128GB内存,而且硬盘采用的是256G SSD系统盘+10个16TSAS数据盘,端口提供的是1Gbps带宽,每月提供200TB,且包含5个IPv4,如果有需要更多IP,也可以升级增加。CPU核心内存硬盘流量带宽价格选择2XE5-2640V2...