2022年最后一篇推文 | C语言编程十诫

news2024/9/24 1:24:30

aaaff81095999b78d278b522b4670a6e.gif

正文


大家好,我是bug菌~

2022年最后一篇推文原本选择一篇年终总结会比较合适,然而坐在窗台,望着窗外思索了良久,与往年总结有点不同,这个时间节点有着他的特殊性,不出意外,明年会有非常多的变化、机遇和挑战。

或许bug也需要认真的花一些时间去总结与规划一下,但到作为工程师的我们总的还是要有能力做出一些产品,能扛得下一些事,有了底气才有资格谈条件。

那么今天还是以技术类文章为主,好好的跟2022道个别吧,跟大家介绍一下C编程十诫,这10条建议是作者Henry Spencer提出来的,bug菌也是在不经意间看到了这10条建议的英文文档《The Ten Commandments for C Programmers》,今天翻译了一下,并做了批注,供大家学习参考:

1、你应该经常运行 lint 并仔细研究它的声明,因为它的感知和判断确实经常超过你的判断力。

(bug菌:尽量能够使用一些静态检测工具,这样通过自动化测试代码能够发现非常多潜在的错误,并且能极大地减轻测试人员的压力,减少软件项目的出错成本,重要的是这些工具的能力可能是我们平常达不到的。)

2、你不能跟随 NULL 指针,因为混乱和疯狂在它的尽头等待着你。

(bug菌:不要使用空指针NULL,他会使得比较混乱。)

3、你应该将所有函数参数转换为预期的类型,即使它们已经不是那种类型,即使你确信这是不必要的,以免它们在你最不期望的时候对你进行残酷的报复。

(bug菌:函数传参有时候一些编译器并不要求完全匹配仍然可以编译通过,不过最好是养成传递给函数的实参与形参保持一致,以免出现移植等问题。)

4、如果你的头文件没有声明你的库函数的返回类型,你应该非常小心地自己声明它们,以免严重的伤害降临到你的程序上。

(bug菌:注意函数声明的返回类型,以免引入bug。)

5、你应该检查所有字符串(实际上是所有数组)的数组边界,因为肯定在你键入的地方,“foo”有一天有人会键入“supercalifragilisticexpialidocious”。

(bug菌:数组越界一定要注意一下,C语言编程比较容易犯错,特别是初学者,加上一些编程中的防御性设计。)

6、如果一个函数被声明为在遇到困难时返回错误代码,你应该检查那个代码,是的,即使检查是你的代码大小的三倍并且会让你的打字手指疼痛,因为如果你认为“这不可能发生在我身上”,众神一定会惩罚你的傲慢。

(bug菌:函数异常返回需要认真对待,并且对于异常需要进行相应的处理,比如动态内存的释放等等。)

7、你应该研究你的库,努力不无缘无故地重新发明它们,这样你的代码就可以简短易读,让你的日子愉快而富有成效。

(bug菌:最好是自己整理一些可移植的库代码,以后直接拿来用提高效率。)

8、即使你不喜欢,你也应该通过使用 One True, Brace Style 让你的同伴清楚你的程序的目的和结构,因为你的创造力更好地用于解决问题,而不是创造美丽的新障碍来理解。

(bug菌:代码的结构和风格比较建议大家遵循 One True, Brace Style,通常也叫(1TBS),以免由于风格和代码结构混乱引入一些问题。)

9、你的外部标识符在前六个字符中应该是独一无二的,尽管这种严厉的纪律会让一些人感到厌烦,而且它的必要性在你面前似乎永无止境地延伸,以免在你希望让你的程序在旧系统上运行的那个决定性的日子里撕破你的头发并发疯。

(bug菌:代码的结构和风格,比较建议大家遵循 One True, Brace Style,通常也叫(1TBS),以免由于风格和代码结构带来一些混乱。)

10、你应摒弃、放弃声称“整个世界都是虚无缥缈”的邪恶异端,并与坚持这种野蛮信仰的愚昧异教徒没有任何往来,你写程序的日子可能会很长,即使你当前机器的日子很短。

(bug菌:玩嵌入式软件还是要理性一点、唯物主义一点,不要认为解释不了的现象,处理不好的bug就是"玄学",当然了,我也相信很多朋友只是开个玩笑。

2023年听起来挺浪漫的,感谢你的陪伴,保持热爱,一起奔赴下一场山海吧~

最后

      好了,今年就跟大家分享这么多了,如果你觉得有所收获,一定记得点个~

最后一个bug,bug菌唯一创作平台~

ca94a85c8daaf2f8092cb898aa196a74.jpeg

推荐专辑  点击蓝色字体即可跳转

☞  MCU进阶专辑 39a23842817181b38762eb75add30a27.gif

☞  嵌入式C语言进阶专辑 8ed06eb8c4e99b0daf9e592e4b12000e.gif

☞  “bug说”专辑 934a8c896fd78d090c37d03f64a6c627.gif

☞ 专辑|Linux应用程序编程大全

☞ 专辑|学点网络知识

☞ 专辑|手撕C语言

☞ 专辑|手撕C++语言

☞ 专辑|经验分享

☞ 专辑|电能控制技术

☞ 专辑 | 从单片机到Linux

d91d1a2dba1cd4cfa2dc1b1e788f50fe.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/132072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenShift 4 - 用 HyperShift 实现以“托管集群”方式部署运行 OpenShift 集群

《OpenShift / RHEL / DevSecOps / Ansible 汇总目录》 说明:本文已经在 OpenShift 4.11 ACM 2.6 AWS 环境中验证 文章目录用 HyperShift 实现 OpenShift 托管集群什么是 HyperShift 托管集群以及架构HyperShift 托管集群的价值成本优势部署优势管理优势在 RHACM …

【Kaggle】Global Wheat Detection

代码链接 实验目的 小麦来自世界各地。密度的小麦植株经常重叠;风会使得照片模糊;外观会因成熟度,颜色,基因型和头部方向而异。使用图像处理和目标检测完成小麦头的位置的标定。完成训练并现场验证后上传指定的输出文件进行验证…

大数据NiFi(三):NiFi关键特性

文章目录 NiFi关键特性 一、​​​​​​​​​​​​​​流管理

人工智能轨道交通行业周刊-第28期(2022.12.26-2023.1.1)

本期关键词:NOCC、车站闸机、雾闪、2022年度盘点、智慧园区 1 整理涉及公众号名单 1.1 行业类 RT轨道交通中关村轨道交通产业服务平台人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通Rai…

安全—01day

DNS 域名解析过程: 1.浏览器首先查询浏览器的缓存,因为浏览器会按照一定的频率缓存 DNS 记录 2.若浏览器无缓存,那么查询操作系统的 HOST 文件,查询是否有 DNS 记录。 3.若还没有命中域名,就请求本地域名服务器该服务器一般都会缓…

Qt音视频开发07-合并音视频文件

一、前言 之前已经把音视频分开存储了对应的文件,因为这个需求特别少,当然确实有部分用户是需要把音视频分开存储,但是毕竟是很少数,绝大部分的用户都是音视频合并到一个MP4文件,所以如果要合并到一个文件&#xff0c…

二进制与十六进制的相互转换;按位操作:与() 和 或(|)

目录 一、二进制转换十六进制 二、十六进制转换二进制 三、按位操作:与(&) 和 或(|) 1、按位与(&)操作 2、按位或(|)操作 得出结论:清0用与&am…

【金猿案例展】海尔集团——追光AI-AOI赋能PCBA缺陷检测

‍数之联案例本项目案例由数之联投递并参与“数据猿年度金猿策划活动——《2022大数据产业年度创新服务企业》榜单/奖项”评选。‍数据智能产业创新服务媒体——聚焦数智 改变商业AOI(Automated Optical Inspection缩写)的中文全称是自动光学检测。通过…

className 还能这么用,你学会了吗

抛出问题 className大家都用过吧,用它在react项目中设置样式。它的用法很简单,除了可以设置一个样式外,react中也可以使用className引入多个类样式。 这次在写项目的时候,碰到一个非常小但是当时却一直解决不了的问题。后面在复…

python基础语法25-进程理论

一、简介 服务器为了能够同时为多个客户端服务,则需要能够同时处理多个网络连接的方法。python提供了3个主要的方法来实现这个目的,multiprocessing、threading和异步I/O。 今天主要说一下进程multiprocessing。 multiprocessing是一个和threading(多线程)类似的库,这个多…

【MVC和三层架构】联系、区别以及简单实践

MVC架构模式MVC架构模式概述引入MVCMVC和三层架构之间的联系和区别三层架构与MVC联系和区别银行转账小项目实践MVC架构模式概述 MVC架构模式是软件架构中的一个架构模式。 M(Model:数据/业务) V(View:视图/展示&#x…

深入xJavaFxTool的插件开发模式

背景 时光华丽丽的来到了2023年,首先在这里祝大家新年快乐,希望大家在新的一年里都能心想事成,万事如意,最重要的是身体健康。过去的2022年里,大家一定都是收获满满。不论是技术的,家庭的,事业的…

【C++】map 与 set 的介绍与使用

目录 一、关联式容器 二、键值对 三、set 3.1 set 的介绍 3.2 set 的使用 3.3. set 的使用举例 四、map 4.1 map的介绍 3.2 map 的使用 4.3 map的使用举例 五、经典练习题 1.set的使用 2.map的使用 思路一(稳定排序): 思路二(priority_queue)&#x…

LabVIEW使用共享变量在两台计算机之间进行通信

LabVIEW使用共享变量在两台计算机之间进行通信 需要选择一台计算机作为服务器并发布变量,而另一台计算机作为客户端接收变量。然后,按照以下步骤设置服务器和客户端计算机。 服务器机器: 创建LabVIEW项目并通过右键单击“我的电脑”并选择…

opencv-python常用函数解析及参数介绍(六)——图像梯度

图像梯度前言Sobel算子算子的定义Sobelx效果演示Sobely效果演示完整轮廓直接计算复杂图片的轮廓Scharr算子与laplacian算子scharr算子的定义laplacian算子定义三种算子的效果对比结尾前言 前面的文章中我们介绍了用膨胀和腐蚀得到了图像轮廓,图像梯度也是一种可以得…

五年六次

今天是 2022 年的最后一天,可算等来了。讽刺的是,就在昨天,小号写了篇文章,啥主题就不说了,然后晚上文章被删了,账号居然也被封了。2022 全年虽然我写过很多文章都被和谐了,但是最后一天喜提封号…

二、Django

Django 提示:本文根据b站黑马python课整理 链接指引 > 黑马程序员python企业级开发项目-手把手从0到1开发《美多商城》 文章目录DjangoMVT图解项目准备1.创建项目2.创建应用3.更换python解释器4.安装应用5.本地化6.项目中匹配urls7.应用中匹配urls.py8.准备视图…

Tensorflow游乐场 在线可视化

playground.tensorflow.org Tensorflow游乐场 Tensorflow游乐场提供了一个在线可视化AI训练。A Neural Network Playgroundhttp://playground.tensorflow.org/ Tensorflow游乐场 是干啥的呢 给一堆点分出蓝色部分和橙色部分。也就是二分类。 它提供了4种数据来训练 每种数据…

致敬客户、致敬行业,知道创宇2022“宇”你并肩前行!

2022回首2022,一幅数字化、智能化升级的壮阔云图徐徐展开,顺势催生出安全技术的全新变革……这一年,中国网络安全企业代表——知道创宇,持续从技术创新、安全服务、行业融合等方面深入网络安全产业升级。我们坚守攻防博弈战场、纵…

burp suite爆破sqli-labs的 less-5

一. 使用proxy抓包,具体数据包如下图: 二. 鼠标右键,将其发送到 intruder中,具体如下图: 三.选择下图选项卡: 1.默认为sniper模式,即如果有多个变量,对每个变量依次进行破解&#xf…