c语言作为程序员来说,是入门语言。c语言 的教材也是多的数不胜数,但是呢,有的c语言教材100-200多页,有的教材600页+,然而很多学者都是学的前者教材。
为什么大家常说的简单的c语言都可以编写那么厚的教材?其一,c语言并不简单,或者说,敢说c语言简单的人都不是一般人;其二,c语言知识点覆盖面广,200多页的教材只是教会了你怎么用,并没有教会你多少实质性内容;其三,很多实用的知识点,在200多页的教材也并没有体现出来。
今天我们主要聊聊那些一般不被重用的,但是却对提升代码质量和效率有奇佳效果的知识点。实话说,没有进公司前,我也忽略了这些,有一些甚至上学期间都没见过。好糗。
正在看这篇文章的朋友,如果你还在上学阶段,请告诉我,你听过"断言"这个名词吗?如果没听过,接下来我就给你好好说说,让你了解了解,如果你听过,给你点赞。
1.程序一般分为两个版本,Debug和Release版本.Debug版本用于内部调试,Release版本给用户使用。断言的关键字是assert.先看下面一个实例。
代码功能不用多解释,随便写的一个算法。断言assert用于检查"不应该"发生的情况。如上代码在运行的时候,如果assert的参数为假,那么程序会在assert中止,同时会提示你在哪个文件的多少行出现了什么错误,也就是assert所在的位置。
需要格外注意的是,assert不是一个函数,是宏。程序员可以把assert看成一个在任何系统状态下都可以安全使用的无害测试手段。并且,使用assert可以省略if else的判断,并且他比if else更智能。如果程序在assert终止,并不是说含有该assert的函数有错误,而是调用者除了差错,assert可以更方便的帮助我们找到发生错误的原因。
2.assert作为一个宏,原型定义在中,如下图,就是判断表达式的真假来反馈给程序员信息。
3.任何事物的出现都有利和弊,assert也是如此,他的缺点是,如果频繁调用assert,会极大地影响到程序的性能,增加格外的开销。所以,工具虽好用,可不要贪用哦。在调试结束后,可以在“#include ”前加 #define NDEBUG来禁用assert.如下:
4.了解了断言assert,在实际使用中,务必注意以下点:
①使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况的区别,后者是必然存在并且是一定要解决的bug。
②assert可以放在程序中的任何位置,但是一般放在程序的入口处,检查参数的有效性或合法性。
③在编写函数的时候,要清楚在该函数中,我要做哪些假定,一旦确定了的假定,就需要使用断言对假定进行检查。
④越来越多的程序员都有了保证程序的健壮性的意识,很好。也就是进行了很多防错设计,当进行防错设计时,如果“不可能发生的事”的确发生了,就需要使用断言报警。
|