C 语言编程规范 -- 华为

1. 代码总体原则

1.1 清晰第一,清晰性是易于维护,易于重构的程序必须具备的特征

代码首先是给人读的,好的代码应当可以像文章一样发生朗诵出来,“程序必须为阅读它的人而编写,只是顺便用于机器执行” – Harold Abelson 和Gerald Jay Sussman
在这里插入图片描述

1.2 优秀的代码可以自我解释,不需要通过注释即可轻易读懂

1.3 头文件中适合放置接口的声明,不适合放置实现

1.4 除了常用的通用缩写外,不得使用单词缩写,不得使用汉语拼音

1.5 防止局部变量和全局变量同名

2. 简洁为美,简洁就是易于理解,并且易于实现

代码越长,越难以看懂,也就越容易在修改时引入错误,写的代码越多,意味着出错的地方越多,也就意味着代码的可靠性越低

2.1 废弃的代码(没有被调用的函数和全局变量)要及时清除,重复代码应该尽可能提炼成函数

2.2 文件应当职责单一

2.3 一个函数仅需要完成一件功能

2.4 新增函数不得超过50 行

3. 选择合适的风格,与原代码保持风格一直(前提是原代码有风格,有的原代码都是乱七八糟的,那就用自己风格吧,骚年)

3.1. 华为论坛 http://hi3ms.huawei.com/group/1735/threads.html (这个网址只能在华为公司内网才能打开,华为内部的 3MS资料库)

4. 头文件

对于C 语言来说,头文件的设计体现了大部分的系统设计,系统框架,不合理的头文件布局是编译时间过长的根本原因,不合理的头文件实际上就是不合理的设计,不合理的系统架构

4.1 头文件编译依赖

a.h 包含了b.h,b.h 又包含了c.h,那么a.h 就会依赖c.h,一旦c.h 修改了,a.h 也会重新编译,嵌套越深,编译时间越长,浪费大量的编译时间去解析头文件

4.2 减少头文件的包含,尤其是在头文件中包含头文件,尽量避免头文件包含头文件

4.3 原则:头文件中适合放置接口的声明,不适合放置实现

  1. 内部使用的函数(相当于类的私有方法),声明不能放置在头文件中,加static 修饰
  2. 内部使用的宏,枚举,结构定义不应放入头文件中
  3. 变量定义不应放在头文件中,应放在 .c 文件中
  4. 变量的声明尽量不要放在头文件中,亦尽量不要使用全局变量作为接口,变量是模块或单元的内部实现细节,不应通过在头文件中声明的方式直接暴露给外部,应通过函数接口的方式对外暴露,即使必须使用全局变量,也只应当在.c 中定义全局变量,在.h中声明变量为全局的

4.4 原则:头文件应当职责单一

头文件过于复杂,依赖过于复杂是导致编译时间过长的主要原因,不能循环依赖

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

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

相关文章

视频集中存储/云存储平台EasyCVR国标GB28181协议接入的报文交互数据包分析

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理…

ChatGPT⼊门到精通(1):ChatGPT 是什么

⼀、直观感受 1、公司 OpenAI(美国) 2、官⽅⽹站 3、登录ChatGPT ![在这里插入图片描述](https://img-blog.csdnimg.cn/26901096553a4ba0a5c88c49b2601e6a.png 填⼊帐号、密码,点击登录。登录成功,如下 3、和ChatGPT对话 开始…

k8s之Pod及Probe 探针机制(健康检查机制)

文章目录 1、Pod1.1、定义1.2、Pod的形式1.3、Pod的使用1.4、 Pod生命周期1.5、初始化容器1.6、临时容器1.6.1、定义1.6.2、使用临时容器的步骤 1.7、静态Pod1.8、创建带标签的pod1.9、容器生命周期回调1.10、容器镜像使用秘钥从私有仓库下载1.11、多容器协同工作 2、Probe 探针…

【CSS 常用加载动画效果】

常用加载效果 呼吸灯效果波浪光效果转圈加载 呼吸灯效果 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><body><div id"ti"></div></body><style>b…

第一百二十四回 Flexible组件

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了扩展内容相关的知识&#xff0c;本章回中将介绍 Flexible组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 我们在前面章回中介绍了扩展列表相关的内容&#xff0c;当页面中其它组件和扩展列表一起使…

C# 使用 OleDbConnection 连接读取Excel的方法

Connection类有四种:SqlConnection&#xff0c;OleDbConnection&#xff0c;OdbcConnection和OracleConnection。 &#xff08;1&#xff09;Sqlconnetcion类的对象连接是SQL Server数据库&#xff1b; &#xff08;2&#xff09;OracleConnection类的对象连接Oracle数据库&…

GAN原理 代码解读

模型架构 代码 数据准备 import os import time import matplotlib.pyplot as plt import numpy as np import torchvision.transforms as transforms from torch.utils.data import DataLoader from torchvision import datasets import torch.nn as nn import torch# 创建文…

堆排序简介

概念&#xff1a; 堆排序是一种基于二叉堆数据结构的排序算法。它的概念是通过将待排序的元素构建成一个二叉堆&#xff0c;然后通过不断地取出堆顶元素并重新调整堆的结构来实现排序。 算法步骤&#xff1a; 构建最大堆&#xff08;或最小堆&#xff09;&#xff1a;将待排…

搭建 Qt6 开发环境

作者&#xff1a; 一去、二三里 个人微信号&#xff1a; iwaleon 微信公众号&#xff1a; 高效程序员 Qt 是一个跨平台的 C 应用程序开发框架&#xff0c;它提供了丰富的组件库和工具&#xff0c;使得开发人员可以在各种平台上轻松地开发 GUI 应用程序。 由于我们的教程 《细说…

CnetSDK .NET OCR SDK Crack

CnetSDK .NET OCR SDK Crack CnetSDK.NET OCR库SDK是一款高度准确的.NET OCR扫描仪软件&#xff0c;用于使用手写、文本和其他符号等图像进行字符识别。它是一款.NET OCR库软件&#xff0c;使用Tesseract OCR引擎技术&#xff0c;可将字符识别准确率提高99%。通过将此.NET OCR扫…

Rancher使用cert-manager安装报错解决

报错&#xff1a; rancher-rke-01:~/rke/rancher-helm/rancher # helm install rancher rancher-stable/rancher --namespace cattle-system --set hostnamewww.rancher.local Error: INSTALLATION FAILED: Internal error occurred: failed calling webhook "webhook…

sentinel的基本使用

在一些互联网项目中高并发的场景很多&#xff0c;瞬间流量很大&#xff0c;会导致我们服务不可用。 sentinel则可以保证我们服务的正常运行&#xff0c;提供限流、熔断、降级等方法来实现 一.限流&#xff1a; 1.导入坐标 <dependency><groupId>com.alibaba.c…

快速排序三种思路详解!

一、快速排序的介绍 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法&#xff0c;其基本思想为&#xff1a;任取待排序元素序列中 的某元素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&#xff0c;左子序列中所有元素均小于基准值&#xff0c;…

激活函数总结(十九):激活函数补充(ISRU、ISRLU)

激活函数总结&#xff08;十九&#xff09;&#xff1a;激活函数补充 1 引言2 激活函数2.1 Inverse Square Root Unit &#xff08;ISRU&#xff09;激活函数2.2 Inverse Square Root Linear Unit (ISRLU)激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函…

python AI绘图教程

前提 1.安装python 2.安装git 步骤 下载stable-diffusion-webui项目&#xff08;链接&#xff1a;GitHub - AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI&#xff09; git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git 安装st…

商城-学习整理-高级-消息队列(十七)

目录 一、RabbitMQ简介(消息中间件)1、RabbitMQ简介&#xff1a;2、核心概念1、Message2、Publisher3、Exchange4、Queue5、Binding6、Connection7、Channel8、Consumer9、Virtual Host10、Broker 二、一些概念1、异步处理2、应用解耦3、流量控制5、概述 三、Docker安装RabbitM…

leetcode做题笔记100. 相同的树

给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 思路一&#xff1a; bool isSameTree(struct TreeNode* p, struct TreeNode* q){if(p NULL &…

js实现img图片懒加载

在前端中&#xff0c;可以使用 JavaScript 来实现图片的懒加载。下面是一种常见的实现方式&#xff1a; 在 HTML 文件中&#xff0c;将需要懒加载的图片的 src 属性替换为一个占位符&#xff0c;例如使用一个透明的空白图片或者是一个包含背景色的 div。给这些图片添加一个自定…

【C++ 学习 ⑰】- 继承(下)

目录 一、派生类的默认成员函数 二、继承与友元 三、继承与静态成员 四、复杂的菱形继承及菱形虚拟继承 五、继承和组合 一、派生类的默认成员函数 派生类的构造函数必须调用基类的构造函数初始化基类的那一部分成员。如果基类没有默认构造函数&#xff0c;那么必须在派生…

报错sql_mode=only_full_group_by

首发博客地址 https://blog.zysicyj.top/ 报错内容 ### The error may exist in file[D:\code\cppCode20221025\leader-system\target\classes\mapper\system\TJsonDataMapper.xml] ### The error may involve defaultParameterMap ### The error occurred while…