华为C/C++编码规范+《数学之美》感想
1.排版
1.1 程序块要采用缩进风格编写, 缩进的空格数为4个。(说明: 对于由开发工具自动生成的代码可以有不一致)
1.2 相对独立的程序块之间、变量说明之后必须加空行。
1.3 循环、判断等语句中若有较长的表达式或语句, 则要进行适应的划分, 长表达式要在低优先级操作符处划分新行, 操作符放在新行之首。
1.4 若函数或过程中的参数较长, 则要进行适当的划分。
1.5 不允许把多个短语句写在一行中, 即一行只写一条语句。
1.6 if、for、do、while、case、switch、default等语句自占一行, 且if、for、do、while等语句的执行语句部分无论多少都要加括号{}。
1.7 对齐只使用空格键, 不使用TAB键。
1.8 函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格, case 语句下的情况处理语句也要遵从语句缩进要求。
1.9 程序块的分界符(如C/C++ 语言的大括号‘{’ 和‘}’ )应各独占一行并且位于同一列, 同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case 语句中的程序都要采用如上的缩进方式。
1.10 在两个以上的关键字、变量、常量进行对等操作时, 它们之间的操作符之前、之后或者前后要加空格; 进行非对等操作时, 如果是关系密切的立即操作符(如->), 后不应加空格。(说明: 采用这种松散方式编写代码的目的是使代码更加清晰。)
注:(1)由于留空格所产生的清晰性是相对的, 所以, 在已经非常清晰的语句中没有必要再留空格, 如果语句已足够清晰则括号内侧(即左括号后面和右括号前面)不需要加空格, 多重括号间不必加空格, 因为在C/C++语言中括号已经是最清晰的标志了。
(2)在长语句中, 如果需要加的空格非常多, 那么应该保持整体清晰, 而在局部不加空格。给操作符留空格时不要连续留两个以上空格。
2.注释
2.1 一般情况下, 源程序有效注释量必须在20%以上。(说明: 注释的原则是有助于对程序的阅读理解, 在该加的地方都加了, 注释不宜太多也不能太少, 注释语言必须准确、易懂、简洁。)
2.2 说明性文件(如头文件.h 文件、.inc 文件、.def 文件、编译说明文件.cfg 等)头部应进行注释, 注释必须列出: 版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等, 头文件的注释中还应有函数功能简要说明。
2.3 源文件头部应进行注释, 列出: 版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。
2.4 函数头部应进行注释, 列出: 函数的目的/ 功能、输入参数、输出参数、返回值、调用关系(函数、表)等
示例: 下面这段函数的注释比较标准, 当然, 并不局限于此格式, 但上述信息建议要包含在内。
Function: // 函数名称
Description: // 函数功能、性能等的描述
Calls: // 被本函数调用的函数清单
Called By: // 调用本函数的函数清单
Table Accessed: // 被访问的表(此项仅对于牵扯到数据库操作的程序)
Table Updated: // 被修改的表(此项仅对于牵扯到数据库操作的程序)
Input: // 输入参数说明, 包括每个参数的作用、取值说明及参数间关系
Output: // 对输出参数的说明
Return: // 函数返回值的说明
2.5 边写代码边注释, 修改代码同时修改相应的注释, 以保证注释与代码的一致性。不再有用的注释要删除。
2.6 注释的内容要清楚、明了, 含义准确, 防止注释二义性。
2.7 避免在注释中使用缩写, 特别是非常用缩写
2.8 注释应与其描述的代码相近, 对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置, 不可放在下面, 如放于上方则需与其上面的代码用空行隔开。
2.9 对于所有有物理含义的变量、常量, 如果其命名不是充分自注释的, 在声明时都必须加以注释, 说明其物理含义。变量、常量、宏的注释应放在其上方相邻位置或右方。
2.10 数组、结构、类、枚举等) , 如果其命名不是充分自注释的, 必须加以注释。对数据结构的注释应放在其上方相邻位置, 不可放在下面; 对结构中的每个域的注释放在此域的右方。
2.11 全局变量要有较详细的注释, 包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。
2.12 注释与所描述内容进行同样的缩排。
2.13 将注释与其上面的代码用空行隔开。
2.14 函数的头部应进行注释,列出函数的功能、目的、输入输出参数、返回值、调用关系(表、函数)等
2.15 对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。
2.16 对于switch语句下的case语句, 如果因为特殊情况需要处理完一个case后进入下一个case处理, 必须在该case语句处理完、下一个case语句前加上明确的注释。
3.标识符命名
3.1 标识符的命名要清晰、明了, 有明确含义, 同时使用完整的单词或大家基本可以理解的缩写, 避免使人产生误解。(说明: 较短的单词可通过去掉“元音”形成缩写; 较长的单词可取单词的头几个字母形成缩写; 一些单词有大家公认的缩写。)
示例: 如下单词的缩写能够被大家基本认可。
temp可缩写为 tmp; 临时
flag可缩写为 flg; 标志
statistic可缩写为 stat ; 统计
increment可缩写为 inc; 增量
message可缩写为 msg; 消息
3.2 命名中若使用特殊约定或缩写, 则要有注释说明。(说明: 应该在源文件的开始之处, 对文件中所使用的缩写或约定, 特别是特殊的缩写, 进行必要的注释说明。)
3.3 自己特有的命名风格, 要自始至终保持一致, 不可来回变化。(说明: 个人的命名风格, 在符合所在项目组或产品组的命名规则的前提下, 才可使用。即命名规则中没有规定到的地方才可有个人命名风格。)
3.4 对于变量命名, 禁止取单个字符(如i、j、k… ), 建议除了要有具体含义外, 还能表明其变量类型、数据类型等, 但i、j、k 作局部循环变量是允许的。
说明: 变量, 尤其是局部变量, 如果用单个字符表示, 很容易敲错(如i写成j), 而编译时又检查不出来, 有可能为了这个小小的错误而花费大量的查错时间。
3.5 命名规范必须与所使用的系统风格保持一致, 并在同一项目中统一, 比如采用UNIX的全小写加下划线的风格或大小写混排的方式, 不要使用大小写与下划线混排的方式, 用作特殊标识如标识成员变量或全局变量的m_ 和g_ , 其后加上大小写混排的方式是允许的
4.可读性
4.1 注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。
4.2 避免使用不易理解的数字, 用有意义的标识来替代。涉及物理状态或者含有物理意义的常量, 不应直接使用数字, 必须用有意义的枚举或宏来代替。
5.变量、结构
5.1 去掉没必要的公共变量。
说明: 公共变量是增大模块间耦合的原因之一, 故应减少没必要的公共变量以降低模块间的耦合度。
5.2 仔细定义并明确公共变量的含义、作用、取值范围及公共变量间的关系。
说明: 在对变量声明的同时, 应对其含义、作用及取值范围进行注释说明, 同时若有必要还应说明与其它变量的关系。
6.函数、过程
6.1 对所调用函数的错误返回码要仔细、全面地处理
6.2 明确函数功能, 精确(而不是近似)地实现函数设计
6.3 编写可重入函数时, 应注意局部变量的使用(如编写C/C++ 语言的可重入函数时, 应使用auto 即缺省态局部变量或寄存器变量)
说明: 编写C/C++语言的可重入函数时, 不应使用static局部变量, 否则必须经过特殊处理, 才能使函数具有可重入性。
《数学之美》感想
书中提到了很多数学模型都是在不断的进化、改良、升级,也就是说有人不断地在做优化,会有不断更好的模型、更新的技术出现,跟得上现代技术的发展是非常重要的,所以感觉作为一个读软件工程专业的人来说,不断地学习不断地提升自己是非常重要的,也是应该做的。
华为C/C++编码规范+《数学之美》感想的更多相关文章
- 代码规范 & 数学之美读后感
代码规范链接:https://zh-google-styleguide.readthedocs.io/en/latest/contents/ 数学之美读后感 一开始看名字我以为是一本讲数学是怎么发展的 ...
- 华为C语言编程规范
DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...
- 资料推荐--Google Java编码规范
之前已经推荐过Google的Java编码规范英文版了: http://google-styleguide.googlecode.com/svn/trunk/javaguide.html 虽然这篇文章的 ...
- 推荐的PHP编码规范
推荐的PHP编码规范 发布时间: 2014-05-7 浏览次数:2754 分类: PHP教程 推荐的PHP编码规范 一 编辑器设置 1. 使用Tab缩进,不要使用空格 鉴于很多编辑器在保存文件时会自动 ...
- 《阿里巴巴Android编码规范》阅读纪要(一)
版权声明:本文出自汪磊的博客,转载请务必注明出处. 2月28日阿里巴巴首次公开内部安卓编码规范,试想那么多业务线,开发人员,没有一套规范管理起来是多么麻烦,以下是个人阅读Android基本组件部分过程 ...
- Python编码规范(PEP8)
Introduction 介绍 本文提供的Python代码编码规范基于Python主要发行版本的标准库.Python的C语言实现的C代码规范请查看相应的PEP指南1. 这篇文档以及PEP 257(文档 ...
- python经典书籍推荐:python编码规范
目录INF-qa Python 编码规范................................................................................ ...
- Python PEP 8 编码规范中文版
原文链接:http://legacy.python.org/dev/peps/pep-0008/ 转发链接:https://blog.csdn.net/ratsniper/article/detail ...
- OWASP安全编码规范快速参考指南
0x00 原则 概览 开发安全的软件需要对安全原则有基本的了解.虽然对于安全原则的全面评估超出了本指南的范围,但是我们还是提供了一个快速的概览.软件安全的目标是要维护信息资源的 保密性 , 完整性 ...
随机推荐
- CF1322B-Present【双指针】
正题 题目链接:https://www.luogu.com.cn/problem/CF1322B 题目大意 给出\(n\)个数字\(a_i\)求 \[\bigoplus _{i=1}^n\bigopl ...
- R7000 电脑调整亮度
R7000 电脑亮度太亮,想调整亮度,fn+F5,F6 不起作用,需要调整显卡的设置
- Http Only Cookie保护AccessToken
前言 JWT认证方式目前已被广泛使用,一直以来我们将token放在请求头中的Authorization中,若通过此种方式,一旦token被恶意窃取,攻击者可肆意对用户可访问资源进行任意索取,我们大多都 ...
- Java初步学习——2021.10.05每日总结,第五周周三
(1)今天做了什么: (2)明天准备做什么? (3)遇到的问题,如何解决? 今天学了对象与类,如何定义类和创建对象,以及构建方法的用法. 明天课比较多,把今天未学的例子敲一遍好了. 没有遇到什么问题.
- MySQL初步学习——2021.09.27每日总结,第四周周一
(1)今天做了什么: (2)明天准备做什么? (3)遇到的问题,如何解决? 今天学习了SQL语句的分类: SQL语句很多,分为 1.DQL:数据查询语言(凡是带有select关键字的都是查询语句) 2 ...
- bzoj1503 郁闷的出纳员(平衡树,思维)
题目大意: 现在有n个操作和一个最低限度m \(I\)命令\(I\ k\)新建一个工资档案,初始工资为k. \(A\)命令$A\ k $把每位员工的工资加上k \(S\)命令$S\ k $把每位员工的 ...
- 一个简单的Java应用程序
目录 一个简单的Java应用程序 首次运行结果 程序示例 运行结果 修改大小写之后的运行结果 程序示例 运行结果 关键字public 关键字class 类名及其命名规则 类名必须以字母开头 不能使用J ...
- (课内)信安数基RSA-level3-5
emmmm感觉其实自己对这个的理解完全不够,原理只能写出这么个东西(悲) 代码完全是 攻击方式中(1)(2)内容的实现. lambda是一种可以理解为匿名函数的写法:写在这里看起来很酷炫(bushi) ...
- 【UE4 C++ 基础知识】<3> 基本数据类型、字符串处理及转换
基本数据类型 TCHAR TCHAR就是UE4通过对char和wchar_t的封装 char ANSI编码 wchar_t 宽字符的Unicode编码 使用 TEXT() 宏包裹作为字面值 TCHAR ...
- Scrum Meeting 0427
零.说明 日期:2021-4-27 任务:简要汇报两日内已完成任务,计划后两日完成任务 一.进度情况 组员 负责 两日内已完成的任务 后两日计划完成的任务 qsy PM&前端 完成部分登录,注 ...