linux系统下如何使用assert函数linux系统下使用as s ert函数的方法。下面是小编精心收集的资料供大家参考!
步骤如下ass ert宏的原型定义在《as s ert.h》中其作用是如果它的条件返回错误则终止程序执行原型定义
#inc lud e 《as s ert.h》void assert( int expression);as s ert的作用是现计算表达式express ion 如果其值为假(即为
0)那么它先向s td err打印一条出错信息
然后通过调用abort来终止程序运行。
请看下面的程序清单b adp tr.c
#inc lud e 《s td io.h》
#inc lud e 《as s ert.h》
#inc lud e 《s td lib.h》int main(void)
{
F ILE*fp;fp=fop en(“te s t.txt” “w”);//以可写的方式打开一个文件如果不存在就创建一个同名文件
as s ert(fp); //所以这里不会出错fclose(fp);fp = fop en( “no exitfile.txt” “r” );//以只读的方式打开一个文件如果不存在就打开文件失败as s ert(fp); //所以这里出错fclose(fp); //程序永远都执行不到这里来return 0;
}
[root@localhost error_process]#gcc badptr.c
[root@localhost error_process]# 。 /a.outa.out b adp tr.c:14 main As s ertio n`fp ‘ failed.
已放弃
使用as s ert的缺点是频繁的调用会极大的影响程序的性能增加额外的开销。
在调试结束后可以通过在包含#inc lud e 《as s ert.h》的语句之前插入#define NDEBUG来禁用as sert调用示例代码如下
#inc lud e 《s td io.h》
#define NDEBUG
#inc lud e 《as s ert.h》
用法总结与注意事项
1)在函数开始处检验传入参数的合法性
如
int res etBufferS ize(int nNewS ize)
{
//功能改变缓冲区大小
//参数 nNewS ize缓冲区新长度
//返回值缓冲区当前长度
//说明保持原信息内容不变nNewS ize 《=0表示清除缓冲区as s ert(nNewS ize 》 =0);as s ert(nNewS ize 《=MAX_BUF F ER_S IZE);
。 。 。
}
2)每个ass ert只检验一个条件 因为同时检验多个条件时如果断言失败无法直观的判断是哪个条件失败
不好 ass ert(nO ffs et 》 =0 && nO ffs et+nS ize
《=m_nInfo mat io nS iz e);
好 as s ert(nO ffs et 》 =0);as s ert(nO ffs et+nS ize 《=m_nInfomationS ize);
3)不能使用改变环境的语句因为as s ert只在DEBUG个生效如果这么做会使用程序在真正运行时遇到问题
错误 ass ert(i++ 《 100)
这是因为如果出错 比如在执行之前i=100那么这条语句就不会执行那么i++这条命令就没有执行。
正确 ass ert(i 《 100)
i++;
4)ass ert和后面的语句应空一行以形成逻辑和视觉上的一致感
5)有的地方 as s ert不能代替条件过滤
腾讯云双十一活动已于今天正式开启了,多重优惠享不停,首购服务器低至0.4折,比如1C2G5M轻量应用服务器仅48元/年起,2C4G8M也仅70元/年起;个人及企业用户还可以一键领取3500-7000元满减券,用于支付新购、续费、升级等各项账单;企业用户还可以以首年1年的价格注册.COM域名。活动页面:https://cloud.tencent.com/act/double11我们分享的信息仍然以秒...
妮妮云的来历妮妮云是 789 陈总 张总 三方共同投资建立的网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑妮妮云的市场定位妮妮云主要代理市场稳定速度的云服务器产品,避免新手购买云服务器的时候众多商家不知道如何选择,妮妮云就帮你选择好了产品,无需承担购买风险,不用担心出现被跑路 被诈骗的情况。妮妮云的售后保证妮妮云退款 通过于合作商的友好协商,云服务器提供2天内全额退款,超过2天不退款 物...
美国服务器哪家平台好?美国服务器无需备案,即开即用,上线快。美国服务器多数带防御,且有时候项目运营的时候,防御能力是用户考虑的重点,特别是网站容易受到攻击的行业。现在有那么多美国一年服务器,哪家的美国云服务器好呢?美国服务器用哪家好?这里推荐易探云,有美国BGP、美国CN2、美国高防、美国GIA等云服务器,线路优化的不错。易探云刚好就是做香港及美国云服务器的主要商家之一,我们来看一下易探云美国云服...