c语言之assert()函数用法总结

article/2025/10/3 14:41:54

1.assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行。
库函数: assert.h
原型定义: void assert( int expression );
assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。
通俗来讲,程序中可以通过assert这个宏来断言。如果断言非真,程序停止,标准错误输出一条具体的错误信息。
assert()的缺点是,频繁的调用会极大的影响程序的性能,增加额外的开销。在调试结束后,可以通过在包含#include <assert.h>的语句之前插入 #define NDEBUG 来禁用assert调用。如:
在这里插入图片描述
另外,assert.h头文件和别的头文件不同,不具有幂等性。
幂等性就是包含该文件一次到多次,效果相同。
但assert.h文件包含多次,却不一定相同。
在这里插入图片描述
一开始就取消了原有的 assert宏的定义
因此打开断言要写成
在这里插入图片描述

2.下面举个例子具体讲解:

 #include <stdio.h>#include <assert.h>#include <stdlib.h>int main( void ){FILE *fp;fp = fopen( "test.txt", "w" );//以可写的方式打开一个文件,如果不存在就创建一个同名文件assert( fp );                           //所以这里不会出错fclose( fp );fp = fopen( "noexitfile.txt", "r" );//以只读的方式打开一个文件,如果不存在就打开文件失败assert( fp );                           //所以这里出错fclose( fp );                           //程序永远都执行不到这里来return 0;
}

3.用法总结与注意事项:

1)在函数开始处检验传入参数的合法性如:

int resetBufferSize(int nNewSize)
{//功能:改变缓冲区大小,//参数:nNewSize 缓冲区新长度//返回值:缓冲区当前长度 //说明:保持原信息内容不变     nNewSize<=0表示清除缓冲区assert(nNewSize >= 0);assert(nNewSize <= MAX_BUFFER_SIZE);...
}

2)每个assert只能检验一个条件,因为同时检验多个条件时,如果断言失败,无法直观的判断是哪个条件失败,如:
错误:assert(nOffset>=0 && nOffset+nSize<=m_nInfomationSize);
正确:assert(nOffset >= 0);
3)不能使用改变环境的语句,因为assert只在DEBUG个生效,如果这么做,会使用程序在真正运行时遇到问题,如:
 错误:
assert(i++ < 100);
这是因为如果出错,比如在执行之前i=100,那么这条语句就不会执行,那么i++这条命令就没有执行。
正确:
assert(i < 100);
i++;
4)地方部分,assert不能代替条件过滤。
5)避免使用断言去检查程序错误
在对断言的使用中,一定要遵循这样一条规定:对来自系统内部的可靠的数据使用断言,对于外部不可靠数据不能够使用断言,而应该使用错误处理代码。换句话说,断言是用来处理不应该发生的非法情况,而对于可能会发生且必须处理的情况应该使用错误处理代码,而不是断言。

更多注意事项请参考:http://c.biancheng.net/c/assert/


http://chatgpt.dhexx.cn/article/sxb6hy4R.shtml

相关文章

接私活必备!国外5个顶级程序员接私活网站

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 人生交契无老少&#xff0c;论交何必先同调。 文章目录 PeoplePerHour&#xff1a;薪酬最高的专业自由职业者网站GuruFreeLancerUpworkFiverr 话说程序员这个职业有…

关于网上程序员接私活的问题

点击上方“程序人生”&#xff0c;选择“置顶公众号” 第一时间关注程序猿&#xff08;媛&#xff09;身边的故事 文丨eachfeel 很多人都谈网上接私活这件事&#xff0c;其实大家想法都差不多&#xff0c;现在做软件的那么多&#xff0c;工资也不是那么高了&#xff0c;不像以前…

程序员兼职可以从什么平台接私活?

之前有一项调查&#xff0c;结果显示&#xff1a;想通过副业赚钱的朋友&#xff0c;其中60%的人找不到门路。今天这篇文章就给大家一批可以接私活的平台。不过&#xff0c;再次强调一下&#xff0c;副业并不等于接私活儿。 私活类型与价格区间 程序员兼职的项目大致可分为三类…

10个程序员可以接私活的平台和一些建议!

来源&#xff1a;http://mrw.so/5isQLi 什么样的私活不能接 1、没有第三方担保的个人对个人的尽量不要接&#xff0c;双方都没保障&#xff0c;出了问题很大的可能撕破脸皮不了了之。 2、一上来就直接说给我开发一个什么软件&#xff0c;不说具体需求&#xff0c;没有需求文档的…

程序员接私活常用平台汇总

作者&#xff1a;镇上宝塔 素材来源&#xff1a;今日头条 今天分享一些接私活的常用平台。 ▍前 言 关于程序员接私活&#xff0c;社会各界说法不一。按照作者的观点来说如果你确实急用钱&#xff0c;价格又合适&#xff0c;那就去做。如果不怎么缺钱&#xff0c;那就接私活之前…

程序员接私活的几个平台和建议,避免掉坑!

大家对于程序员接私活这件事的看法&#xff0c;褒贬不一。但是你如果确实用钱&#xff0c;价格又合适&#xff0c;那就大胆去接。 如果不那么缺钱&#xff0c;那么接私活之前先考虑清楚&#xff0c;如果自己将空余时间用在接私活所产生的价值是不是大于提升自己。如果是的话&a…

程序员接私活月入2万?分享10个接私活的网站快收藏~

最近&#xff0c;在和身边的程序员聊天中&#xff0c;听不少朋友分享了自己接私活的经历&#xff0c;那收入真是让我“瞠目结舌” … 程序员A&#xff1a;我Java程序员&#xff0c;工作两年&#xff0c;月薪13K&#xff0c;私活20K。 程序员B&#xff1a;之前在单位上班&#…

推荐几个程序员接私活的网站

相信很多新手程序员&#xff0c;都希望能迅速提高自己的能力同时&#xff0c;又可以赚点外快增加下个人收入&#xff0c;那么&#xff0c;去接一些私活是一个不错的选择。但是接私活之前也要考虑清楚&#xff0c;因为私活一般都会占用自己大量的休息时间&#xff0c;而如果你把…

程序员接私活完整攻略

接私活对程序员这个圈子来说是一个既公开又隐私的话题&#xff0c;不说全部&#xff0c;应该大多数程序员都有过想要接私活的想法&#xff0c;当然&#xff0c;也有部分得道成仙的不主张接私活。但是很少有人在公开场合讨论私活的问题&#xff0c;似乎都在避嫌。就跟有人下班后…

【程序人生】程序员接私活常用平台汇总

00. 目录 文章目录 00. 目录01. 前言02. 程序员客栈03. 码市04. 猪八戒网05. 开源众包06. 智城外包网07. 实现网08. 猿急送09. 人人开发10. 开发邦11. 电鸭社区12. 快码13. 英选14. Upwork15. Freelancer16. Dribbble17. Remoteok18. Toptal19. AngelList20. Topcoder21. 附录 …

程序员们,千万不要接私活!

点击上方“程序员小灰”&#xff0c;选择“置顶公众号” 有趣有内涵的文章第一时间送达&#xff01; 本文转载自公众号 前端你别闹 这个话题很纠结 现在社会&#xff0c;有很多人都在利用个人时间兼职赚钱&#xff0c;程序员俗称“接私活”&#xff0c;其他行业称作兼职&#x…

盘点10个程序员可以接私活的平台和一些建议,赚麻了...

你们当程序员不会都拿着几千、万把块钱的死工资吧&#xff0c;今天为大家分享一些可以接私单的平台&#xff0c;我反正已经赚麻了。 如果你的工作相对没那么费时间&#xff0c;可以空闲的时候去接点私活。或者是还没有找工作之前&#xff0c;可以通过一些平台接一些兼职&#…

程序员一般通过什么途径接私活?怎样做兼职程序员接私活?

国内众包平台和国外众包平台差不多&#xff0c;只不过国外的工程师来自全球&#xff08;当然美欧印居多&#xff09;&#xff0c;业务范围比国内的多一点&#xff0c;具体可以看upwork、freelancer上的介绍&#xff0c;不过国外的合作方式多少有些水土不服&#xff0c;如果接单…

程序员第一次接私活?记住这三点让你事半功倍

不少程序员都有接私活的想法&#xff0c;但恰恰就如开发者之间的论调一样&#xff0c;接私活其实是有一定难度的&#xff0c;想找到合适的单子&#xff0c;顺利地做完并拿到薪水&#xff0c;需要注意的事儿很多&#xff0c;接下来和大家分享一下&#xff0c;程序员第一次接私活…

程序员接私活最最完整攻略

接私活对于程序员这个圈子来说是一个既公开又隐私的话题&#xff0c;当你竭尽全力想要去接私活的时候一定做过这样的事情&#xff0c;百度搜索“程序员如何接私活”、“程序员在哪里接外包”等等问题&#xff0c;今天就送大家最完整攻略&#xff0c;千万别错过了。 做私活挣钱吗…

前端程序员接私活,直呼赚麻了

总有一些前端程序员会想找私活&#xff0c;但是又不清楚具体的办法&#xff0c;或者是做了但没完全做&#xff0c;吃力又不讨好还赚不到钱。今天就给大家介绍一些可行性高的方法&#xff0c;让你快速找到合适的前端兼职。 干货满满&#xff0c;希望大家点赞收藏下&#xff0c;别…

程序员接私活月入2万?分享10个接私活的网站!

最近&#xff0c;播妞在和身边的程序员聊天中&#xff0c;听不少朋友分享了自己接私活的经历&#xff0c;那收入真是让我“瞠目结舌” ...... 程序员A&#xff1a;我Java程序员&#xff0c;工作两年&#xff0c;月薪13K&#xff0c;私活20K。 程序员B&#xff1a;之前在单位上班…

接私活必备的 10 个开源项目!

点击蓝色“GitHubDaily”关注我 加个“星标”&#xff0c;每天下午 18:35&#xff0c;带你逛 GitHub&#xff01; 作者 | SevDot 来源 | http://1t.click/VE8 Web 开发中几乎的平台都需要一个后台管理&#xff0c;但是从零开发一套后台控制面板并不容易&#xff0c;幸运的是有很…

程序员一般都如何接私活,我也想接,有什么可行的方法吗?

二哥&#xff0c;你好&#xff0c;我想知道一般程序猿都如何接私活&#xff0c;我也想接&#xff0c;能告诉我一些方法吗&#xff1f; 上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”&#xff0c;还有很多读者问过我类似这样的问题。 我接的私活不算多&#x…

8个接私活的网站,只要你有码,那“我”就有钱

今天为大家带来的内容正是江湖卖艺赚钱养家的好渠道&#xff08;程序员&#xff1a;8个接私活的网站&#xff0c;只要你有码&#xff0c;那“我”就有钱&#xff01;&#xff09;一起来看看吧&#xff01; 1、程序员客栈&#xff1a;程序员的经纪人 https://www.proginn.com/ 2…