C规范编辑笔记(十一)

news2024/10/6 18:35:55

往期文章:

C规范编辑笔记(一)
C规范编辑笔记(二)
C规范编辑笔记(三)
C规范编辑笔记(四)
C规范编辑笔记(五)
C规范编辑笔记(六)
C规范编辑笔记(七)
C规范编辑笔记(八)
C规范编辑笔记(九)
C规则编辑笔记(十)

正文:

因为太久没有更新了,今天就发两篇吧,我们继续来看C规范编辑笔记的第十一篇笔记。话不多说,直接将~

1、建议——对函数建立专门的功能文档,其描述包括:
(1)、 对功能和所执行处理的描述
(2)、 每个参数的文档、参数的方向(输入、输出、输入和输出)及其上存在的任何条件;
(3)、 必须描述可能的返回值。

以上这些点其实是很有必要的,因为你如果看大厂的资料代码就会发现他们在函数定义和声明时候会在上面对这个函数的参数、作用、返回值做很详细的说明,方便后期其他人为维护,同时也方便我们更好去理解和阅读,因此我们也有必要养成这样的习惯~,对你自己肯定是有帮助的。

2、规则——必须系统地质疑函数所有参数的有效性。尤其是遇到除数时候,需要考虑分母是不是为0的可能性,当然还需要考虑其他,这需要我们视情况来看,比如如下例子:

Bad example:
double division(int32_t n, int32_t d)  
{
	/* d != 0 未验证 */
	return ((double)n) / ((double)d);  //如果d为0,系统会报错
}

Good example:
double division(int32_t n, int32_t d) {
double res = 0.0;
if(0 == d) {     //对d为0的情况做了处理
    /* 错误处理 */
}
else {
        res = ((double)n) / ((double)d);
     }
     return res;
}

3、规则–使用指针参数时候,如果相应带入的参数不被更改,可以在相应形参前面加上关键字const。对参数添加了const参数,可以防止在函数内部操作时候修改我们带入形参的原值。举例:

Bad example:
uint32_t foo(uint32_t *val)
{
    /*这里没有对val指针进行判断,判断其是否是野指针*/
    *val = (*val) * 2;  /*这步操作会导致相应导入的该foo函数的指针参数会被修改值*/
    return *val;
}


Good example:
uint32_t foo(const uint32_t *val)   //对参数添加了const,防止函数内部的修改,影响其带入的原参数值
{
    *val = (*val) * 2; /*这里的修改只会修改val形参的指针值,并不会影响其带入的参数值,因为添加了const*/
            return *val;
}

4、规则 — 内联函数必须声明为静态的。 为了避免未定义的行为,内联函数在系统上是静态的。

5、规则——不要重新定义标准库或其他库中的函数或宏。防止多次重复定义,造成错误。

6、不将结构的值作为函数参数传递。C 语言可以将结构作为函数的参数传递。然后将它们复制到堆栈中。然而,这对性能不利,并增加了堆栈溢出甚至敏感数据泄漏的风险。 与结构对应的参数必须以 const 限定指针的形式传递。然后仅将结构的地址复制到堆栈。此外,const 修饰符可防止更改指向的对象。

好了,第十一篇C规范编辑笔记分享我们就到这里了,我们第十二篇见~

在这里插入图片描述
本人水平有限,上述信息仅供学习参考,如有错误和不妥之处,请多多指教。
另外创作不易,请勿抄袭,如果有帮助到大家的话希望大家可以点个赞,谢谢~

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

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

相关文章

Elasticsearch7.8.0版本高级查询—— 多关键字精确查询文档

目录一、初始化文档数据二、多关键字精确查询文档2.1、概述2.2、示例一、初始化文档数据 在 Postman 中,向 ES 服务器发 POST 请求 :http://localhost:9200/user/_doc/1,请求体内容为: {"name":"张三","…

干货 | 算力网络节点可信度评估和安全管控方案

以下内容整理自清华大学《数智安全与标准化》课程大作业期末报告同学的汇报内容。第一部分:算力网络第二部分:可信度评估一、可信度评估在整个算力网络处理任务的实施流程中,不同部分有不同可信度评估的方法,具体包括:…

忙活了一年的开源社区,终于赶上了春节前的末班车!

随着春节的临近,忙碌了一年的小伙伴们,是不是都已经踏上了回乡的列车?我呢也终于在春节前,完成了 HelloGitHub.com 的重构。HelloGitHub.com 是我在 2017 年的时候用 FlaskjQuery 开发的网站,最初的想法很简单就是为了…

MySQL34道练习题

1、取得每个部门最高薪水的人员名称(要求显示部门编号、人员名称和薪资) 第一步:查询每个部门的最高薪资 SELECT deptno,max(sal) as maxsal FROM emp GROUP BY deptno; 第二步:把上面查询结果当做临时表t&#xff0…

Pagoda panel宝塔面板

宝塔面板是干什么的?有哪些典型的功能作用?宝塔面板是开发的服务器管理工具,是一家专业从事服务器相关软件和服务研发的公司。宝塔的愿景是让用户更容易使用服务器。宝塔面板是一款服务器管理软件,支持Windows和Linux系统,服务器…

【SpringCloud18】SpringCloud Alibaba Nacos服务注册和配置中心

1.Nacos简介 1.1为什么叫Nacos 前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service 1.2 是什么 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台Nacos:Dynamic Naming and Configuration ServiceNacos就是注册中心 配置中心…

简单双向LSTM模型实战项目

前言 数据来自于kaggle比赛Ventilator Pressure Prediction,数据背景介绍请看官方说明代码来自于当前排名第一的团队Shujun, Kha, Zidmie, Gilles, B,他们在获得第一名的成绩以后发了一篇博客,提供了他们在比赛中使用的模型,包括…

[C/C++]对象指针

对象指针 1.对象指针变量 和基本类型变量一样,对象在初始化之后也会在内存中占有若干字节的内存空间。因此在程序中,我们可以通过对象名或对象的地址来访问该对象。对象指针变量就是一个用于保存对象在内存中存储空间首地址的指针变量,它与普…

Python Matplotlib 中如何用 plt.savefig 存储图片

目录前言正文前言 plt.show()展示图片的时候,截图进行保存,图片不是多么清晰 如何保存高清图也是一知识点 函数包名:import matplotlib.pyplot as plt 正文 主要功能:保存绘制数据后创建的图形。使用此方法可以将创建的图形保…

MobaXterm的安装与使用

安装: 分为开箱即用和逐步配置版本,这里选择开箱即用的版本,网址如下: MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - Home EditionFree X server for Windows with tabbed SSH terminal, telnet, RDP, VNC and X11-forwarding - Home Editionhttps://mobaxterm.m…

Java面试题(2),这是一篇会一直更新的博客!欢迎大家留言~

Java面试题第二篇1. 并发的三大特性2、线程池、解释线程池参数3、BeanFactory和ApplicationContext有什么区别?4、描述一下Spring Bean的生命周期5、Spring的几种Bean的作用域6、单例Bean是线程安全的吗?7、Spring框架用到了哪些设计模式8、Spring事务的…

Magic Leap CEO:我们的目标是再回到消费级AR市场

相比于几年前,Magic Leap在CEO换人后经历了一系列变化,其中更明显的变化,就是这家公司似乎变得更低调、更务实。此前,Magic Leap的内容库包括了大量趣味、娱乐的AR应用,而现在则主要改成B端解决方案,随着ML…

小程序商城源码代码分析

微信平台开发直播插件后,许多传统的商家开始加入小程序商城源码开发的队伍中,以此来自主管理自己的产品。下文,小编将为大家盘点一下小程序商城源码的优势,以及代码分析。 一、小程序商城源码有什么优势? 1、拓展私域…

定时任务中将redis数据存入数据库相关问题

我的GitHub:Powerveil GitHub我的Gitee:Powercs12 (powercs12) - Gitee.com皮卡丘每天学Java觉得昨天晚上只是分析和解决问题,很多人可能不知道出bug的场景,今天决定重现bug,让代码改回错误代码,重现看到一…

科研快报|PacBio 16S全长测序探究游离唾液微生物群失调在牙周病中的潜在作用

背景介绍唾液是口腔中最重要的介质。唾液中游离细菌的生态失调可能与牙周病的发生、发展、预后和复发有关,但这种潜在的关系尚不清楚。本研究的目的是探讨游离唾液微生物群在不同牙周状态下的潜在作用,它们对非手术牙周治疗的反应,以及治疗后…

年后旺季,服装实体店如何利用微信做新款宣传?

每年过完大年开工后,我们服装的旺季就来临了,对于很多服装店铺来说,无疑是一个必须把握的大好机会。就拿这几天的天气来说,广东最高温度达到了26度,很多人又把自己春夏的衣服拿出来了,而年后气温必然回暖&a…

Swin Transformer代码实战篇

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题 🍊往期回顾:CV攻城狮入门VIT(vision transformer)之旅——近年超火的Transformer你再不了解就晚了! CV攻城狮入门VIT(vision transformer)之旅——VIT原…

列表元素 有序列表 无序列表 定义列表 ol: ul: dl: dd: dt:

目录列表元素有序列表无序列表定义列表列表元素 有序列表 ol: ordered list 表示整个列表 li: list item 表示单个列表,列表的子元素 reversed: 导则 列表的写法: 但实际开发中一般不用type来设置列表的序,而是用css 把大象装冰箱分几步…

SpringBoot 项目

不得不佩服 Spring Boot 的生态如此强大,今天我给大家推荐几款 Gitee 上优秀的后台开源版本的管理系统,小伙伴们再也不用从头到尾撸一个项目了,简直就是接私活,挣钱的利器啊。SmartAdmin我们开源一套漂亮的代码和一套整洁的代码规…

2.4、进程通信

整体框架 1、什么是进程通信? 顾名思义,进程通信就是指进程之间的信息交换。 进程是分配系统资源的单位(包括内存地址空间), 因此各进程\color{red}各进程各进程拥有的内存地址空间相互独立\color{red}内存地址空间相互独立内存…