华为技术有限公司c语言编程规范.pdf

上传人:b****1 文档编号:3210753 上传时间:2022-11-20 格式:PDF 页数:61 大小:915.01KB
下载 相关 举报
华为技术有限公司c语言编程规范.pdf_第1页
第1页 / 共61页
华为技术有限公司c语言编程规范.pdf_第2页
第2页 / 共61页
华为技术有限公司c语言编程规范.pdf_第3页
第3页 / 共61页
华为技术有限公司c语言编程规范.pdf_第4页
第4页 / 共61页
华为技术有限公司c语言编程规范.pdf_第5页
第5页 / 共61页
点击查看更多>>
下载资源
资源描述

华为技术有限公司c语言编程规范.pdf

《华为技术有限公司c语言编程规范.pdf》由会员分享,可在线阅读,更多相关《华为技术有限公司c语言编程规范.pdf(61页珍藏版)》请在冰豆网上搜索。

华为技术有限公司c语言编程规范.pdf

DKBA华为技术有限公司内部技术规范DKBA2826-2011.5C语言编程规范2011年5月9日发布2011年5月9日实施华为技术有限公司HuaweiTechnologiesCo.,Ltd.版权所有侵权必究Allrightsreserved密级:

confidentialitylevelDKBA2826-2011.52011-06-02华为机密,未经许可不得扩散HuaweiConfidential第2页,共61页Page2,Total61修订声明Revisiondeclaration本本规范规范拟制与解释部门:

拟制与解释部门:

本规范的相关系列规范或文件:

相关国际规范或文件一致性:

替代或作废的其它规范或文件:

相关规范或文件的相互关系:

规范号规范号主要起草部门专家主要起草部门专家主要评审部门专家主要评审部门专家修订情况修订情况DKBAxxxx.x-xxxx.xxPSST质量部:

郭曙光00121837网络:

张伟00118807周灿00056781王晶00041937陈艺彪00036913IP开发部:

薛治00038309核心网:

张小林00058208王德喜00040674李明胜00042021软件公司:

文滔00119601无线:

刘爱华00162172中研:

谭洪00162654PSST质量部:

李重霄00117374郭永生00120218核心网:

张进柏00120359中研:

张建保00116237无线:

苏光牛00118740郑铭00118617陶永祥00120482软件公司:

周代兵00120359刘心红00118478朱文琦00172539网络:

王玎00168059黄维东49827IP开发部:

饶远00152313密级:

confidentialitylevelDKBA2826-2011.52011-06-02华为机密,未经许可不得扩散HuaweiConfidential第3页,共61页Page3,Total61目录TableofContents0规范制订说明.50.1前言.50.2代码总体原则.50.3规范实施、解释.60.4术语定义.61头文件.62函数.123标识符命名与定义.213.1通用命名规则.213.2文件命名规则.233.3变量命名规则.233.4函数命名规则.243.5宏的命名规则.244变量.255宏、常量.286质量保证.327程序效率.368注释.399排版与格式.4410表达式.4611代码编辑、编译.4912可测性.5013安全性.5113.1字符串操作安全.5113.2整数安全.5213.3格式化输出安全.5613.4文件I/O安全.5713.5其它.5914单元测试.5915可移植性.6016业界编程规范.60密级:

confidentialitylevelDKBA2826-2011.52011-06-02华为机密,未经许可不得扩散HuaweiConfidential第4页,共61页Page4,Total61C语言编程规范范范围围:

本规范适用于公司内使用C语言编码的所有软件。

本规范自发布之日起生效,以后新编写的和修改的代码应遵守本规范。

简简介:

介:

本规范制定了编写C语言程序的基本原则、规则和建议。

从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

密级:

confidentialitylevelDKBA2826-2011.52011-06-02华为机密,未经许可不得扩散HuaweiConfidential第5页,共61页Page5,Total6100规范制订说明规范制订说明0.1前言为提高产品代码质量,指导广大软件开发人员编写出简洁、可维护、可靠、可测试、高效、可移植的代码,编程规范修订工作组分析、总结了我司的各种典型编码问题,并参考了业界编程规范近年来的成果,重新对我司1999年版编程规范进行了梳理、优化、刷新,编写了本规范。

本规范将分为完整版和精简版,完整版将包括更多的样例、规范的解释以及参考材料(what&why),而精简版将只包含规则部分(what)以便查阅。

在本规范的最后,列出了一些业界比较优秀的编程规范,作为延伸阅读参考材料。

0.2代码总体原则11、清晰第一、清晰第一清晰性是易于维护、易于重构的程序必需具备的特征。

清晰性是易于维护、易于重构的程序必需具备的特征。

代码首先是给人读的,好的代码应当可以像文章一样发声朗诵出来。

目前软件维护期成本占整个生命周期成本的40%90%。

根据业界经验,维护期变更代码的成本,小型系统是开发期的5倍,大型系统(100万行代码以上)可以达到100倍。

业界的调查指出,开发组平均大约一半的人力用于弥补过去的错误,而不是添加新的功能来帮助公司提高竞争力。

“程序必须为阅读它的人而编写,只是顺便用于机器执行。

”HaroldAbelson和GeraldJaySussman“编写程序应该以人为本,计算机第二。

”SteveMcConnell本规范通过后文中的原则(如头优秀的代码可以自我解释,不通过注释即可轻易读懂/头文件中适合放置接口的声明,不适合放置实现/除了常见的通用缩写以外,不使用单词缩写,不得使用汉语拼音)、规则(如防止局部变量与全局变量同名)等说明清晰的重要性。

一般情况下,代码的可阅读性高于性能,只有确定性能是瓶颈时,才应该主动优化。

22、简洁为美、简洁为美简洁就是易于理解并且易于实现。

简洁就是易于理解并且易于实现。

代码越长越难以看懂,也就越容易在修改时引入错误。

写的代码越多,意味着出错的地方越多,也就意味着代码的可靠性越低。

因此,我们提倡大家通过编写简洁明了的代码来提升代码可靠性。

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

本规范通过后文中的原则(如文件应当职责单一/一个函数仅完成一件功能)、规则(重复代码应该尽可能提炼成函数/避免函数过长,新增函数不超过50行)等说明简洁的重要性。

33、选择合适的风格,与代码原有风格保持一致、选择合适的风格,与代码原有风格保持一致产品所有人共同分享同一种风格所带来的好处,远远超出为了统一而付出的代价。

在公司已有编码规范的指导下,审慎地编排代码以使代码尽可能清晰,是一项非常重要的技能。

如果重构如果重构/修改其他风格修改其他风格的代码时,比较明智的做法是根据的代码时,比较明智的做法是根据现有现有代码代码的的现有风格继续编写代码现有风格继续编写代码,或者使用格式转换工具进行转密级:

confidentialitylevelDKBA2826-2011.52011-06-02华为机密,未经许可不得扩散HuaweiConfidential第6页,共61页Page6,Total61换成公司内部风格。

0.3规范实施、解释本规范制定了编写C语言程序的基本原则、规则和建议。

本规范适用于公司内使用C语言编码的所有软件。

本规范自发布之日起生效,对以后新编写的和修改的代码应遵守本规范。

本规范由质量体系发布和维护。

实施中遇到问题,可以到论坛http:

/术语定义原则原则:

编程时必须坚持的指导思想。

规则规则:

编程时强制必须遵守的约定。

建议建议:

编程时必须加以考虑的约定。

说明说明:

对此原则/规则/建议进行必要的解释。

示例示例:

对此原则/规则/建议从正、反两个方面给出例子。

延伸阅读材料延伸阅读材料:

建议进一步阅读的参考材料。

11头文件头文件背景对于对于C语言来说,头文件的设计体现了大部分的系统设计。

语言来说,头文件的设计体现了大部分的系统设计。

不合理的头文件布局是编译时间过长的根因,不合理的头文件实际上不合理的设计。

术语定义:

依赖依赖:

本章节特指编译依赖。

若x.h包含了y.h,则称作x依赖y。

依赖关系会进行传导,如x.h包含y.h,而y.h又包含了z.h,则x通过y依赖了z。

依赖将导致编译时间的上升。

虽然依赖是不可避免的,也是必须的,但是不良的设计会导致整个系统的依赖关系无比复杂,使得任意一个文件的修改都要重新编译整个系统,导致编译时间巨幅上升。

在一个设计良好的系统中,修改一个文件,只需要重新编译数个,甚至是一个文件。

某产品曾经做过一个实验,把所有函数的实现通过工具注释掉,其编译时间只减少了不到10%,究其原因,在于A包含B,B包含C,C包含D,最终几乎每一个源文件都包含了项目组所有的头文件,从而导致绝大部分编译时间都花在解析头文件上。

某产品更有一个“优秀实践”,用于将.c文件通过工具合并成一个比较大的.c文件,从而大幅度提高编译效率。

其根本原因还是在于通过合并.c文件减少了头文件解析次数。

但是,这样的“优秀实践”是对合理划分.c文件的一种破坏。

大部分产品修改一处代码,都得需要编译整个工程,对于TDD之类的实践,要求对于模块级别的编译时间控制在秒级,即使使用分布式编译也难以实现,最终仍然需要合理的划分头文件、以及头文件之间的包含关系,从根本上降低编译时间。

密级:

confidentialitylevelDKBA2826-2011.52011-06-02华为机密,未经许可不得扩散HuaweiConfidential第7页,共61页Page7,Total61googleC+StyleGuide1.2头文件依赖章节也给出了类似的阐述:

若包含了头文件aa.h,则就引入了新的依赖:

一旦aa.h被修改,任何直接和间接包含aa.h代码都会被重新编译。

如果aa.h又包含了其他头文件如bb.h,那么bb.h的任何改变都将导致所有包含了aa.h的代码被重新编译,在敏捷开发方式下,代码会被频繁构建,漫长的编译时间将极大的阻碍频繁构建。

因此,我们倾向于减少包含头文件,尤其是在头文件中包含头文件,以控制改动代码后的编译时间。

合理的头文件划分体现了系统设计的思想,但是从编程规范的角度看,仍然有一些通用的方法,用来合理规划头文件。

本章节介绍的一些方法,对于合理规划头文件会有一定的帮助。

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

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

说明:

头文件是模块(Module)或单元(Unit)的对外接口。

头文件中应放置对外部的声明,如对外提供的函数声明、宏定义、类型定义等。

内部使用的函数(相当于类的私有方法)声明不应放在头文件中。

内部使用的宏、枚举、结构定义不应放入头文件中。

变量定义不应放在头文件中,应放在.c文件中。

变量的声明尽量不要放在头文件中,亦即尽量不要使用全局变量作为接口。

变量是模块或单元的内部实现细节,不应通过在头文件中声明的方式直接暴露给外部,应通过函数接口的方式进行对外暴露。

即使必须使用全局变量,也只应当在.c中定义全局变量,在.h中仅声明变量为全局的。

延伸阅读材料:

C语言接口与实现(DavidR.Hanson著傅蓉周鹏张昆琪权威译机械工业出版社2004年1月)(英文版:

CInterfacesandImplementations)原则原则1.21.2头文件应当职责单一头文件应当职责单一。

说明:

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

很多现有代码中头文件过大,职责过多,再加上循环依赖的问题,可能导致为了在.c中使用一个宏,而包含十几个头文件。

示例:

如下是某平台定义WORD类型的头文件:

#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include密

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 思想汇报心得体会

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1