网站首页 > 教程分享 正文
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作为一个宏,原型定义在<assert.h>中,如下图,就是判断表达式的真假来反馈给程序员信息。
3.任何事物的出现都有利和弊,assert也是如此,他的缺点是,如果频繁调用assert,会极大地影响到程序的性能,增加格外的开销。所以,工具虽好用,可不要贪用哦。在调试结束后,可以在“#include <assert.h>”前加 #define NDEBUG来禁用assert.如下:
4.了解了断言assert,在实际使用中,务必注意以下点:
①使用断言捕捉不应该发生的非法情况。不要混淆非法情况与错误情况的区别,后者是必然存在并且是一定要解决的bug。
②assert可以放在程序中的任何位置,但是一般放在程序的入口处,检查参数的有效性或合法性。
③在编写函数的时候,要清楚在该函数中,我要做哪些假定,一旦确定了的假定,就需要使用断言对假定进行检查。
④越来越多的程序员都有了保证程序的健壮性的意识,很好。也就是进行了很多防错设计,当进行防错设计时,如果“不可能发生的事”的确发生了,就需要使用断言报警。
每天进步一点点,每天消化点点,程序员的道路还很漫长,知识点虽有限但很多,我会持续更新,如果你对此文都自己的见解,欢迎下方留言,一起交流。
猜你喜欢
- 2024-10-18 信号 - Linux Signal - 网络编程的相关信号
- 2024-10-18 干货 | 一文搞定 pytest 自动化测试框架(一)
- 2024-10-18 linux网络编程—tcp和udp基本函数调用过程及如何选择
- 2024-10-18 C语言之结构体基础(c语言结构体经典例题)
- 2024-10-18 linux定时器编程详解(包含代码)(linux定时器执行脚本)
- 2024-10-18 C语言学习第16篇---三目运算符和逗号表达式
- 2024-10-18 Linux网络编程相关高级I/O函数 - 用于创建文件描述符的函数
- 2024-10-18 干货 | 一文搞定 pytest 自动化测试框架(二)
- 2024-10-18 现代c++之移动构造,移动赋值,拷贝构造,拷贝赋值
- 2024-10-18 探索C语言断言:保证程序的健壮性和可靠性
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)