华为技术c语言编程规范_2011新版

上传人:小** 文档编号:93282434 上传时间:2019-07-19 格式:PDF 页数:60 大小:871.72KB
返回 下载 相关 举报
华为技术c语言编程规范_2011新版_第1页
第1页 / 共60页
华为技术c语言编程规范_2011新版_第2页
第2页 / 共60页
华为技术c语言编程规范_2011新版_第3页
第3页 / 共60页
华为技术c语言编程规范_2011新版_第4页
第4页 / 共60页
华为技术c语言编程规范_2011新版_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《华为技术c语言编程规范_2011新版》由会员分享,可在线阅读,更多相关《华为技术c语言编程规范_2011新版(60页珍藏版)》请在金锄头文库上搜索。

1、DKBA 华为技术有限公司内部技术规范 DKBA 2826-2011.5 C语言编程规范 2011年5月9日发布 2011年5月9日实施 华为技术有限公司 Huawei Technologies Co., Ltd. 版权所有 侵权必究 All rights reserved 密级:confidentiality level DKBA 2826-2011.5 2011-05-10 华为机密,未经许可不得扩散 Huawei Confidential 第2页,共60页Page 2 , Total60 修订声明Revision declaration 本本规范规范拟制与解释部门:拟制与解释部门: 本规

2、范的相关系列规范或文件: 相关国际规范或文件一致性: 替代或作废的其它规范或文件: 相关规范或文件的相互关系: 规范号规范号 主要起草部门专家主要起草部门专家 主要评审部门专家主要评审部门专家 修订情况修订情况 DKBAxxxx.x-xxxx.xx PSST质量部: 郭曙光00121837 网络: 张伟00118807 周灿00056781 王晶00041937 陈艺彪00036913 IP开发部: 薛治00038309 核心网: 张小林00058208 王德喜00040674 李明胜00042021 软件公司: 文 滔00119601 无线: 刘爱华00162172 中研: 谭洪001626

3、54 PSST质量部: 李重霄00117374 郭永生00120218 核心网: 张进柏00120359 中研: 张建保00116237 无线: 苏光牛00118740 郑铭00118617 陶永祥00120482 软件公司: 周代兵00120359 刘心红00118478 朱文琦00172539 网络: 王玎00168059 黄维东49827 IP开发部: 饶远00152313 密级:confidentiality level DKBA 2826-2011.5 2011-05-10 华为机密,未经许可不得扩散 Huawei Confidential 第3页,共60页Page 3 , Tota

4、l60 目 录Table of Contents 0规范制订说明 5 0.1前言 5 0.2代码总体原则 . 5 0.3规范实施、解释 . 6 0.4术语定义 6 1头文件 . 6 2函数 . 12 3标识符命名与定义 . 21 3.1通用命名规则 . 21 3.2文件命名规则 . 23 3.3变量命名规则 . 23 3.4函数命名规则 . 24 3.5宏的命名规则 . 24 4变量 . 24 5宏、常量 . 28 6质量保证 . 31 7程序效率 . 36 8注释 . 38 9排版与格式 43 10表达式 . 45 11代码编辑、编译 49 12可测性 . 49 13安全性 . 50 13.

5、1字符串操作安全 . 51 13.2整数安全 52 13.3格式化输出安全 . 55 13.4文件I/O安全 57 13.5其它 58 14代码测试 . 59 15可移植性 . 59 16业界编程规范 60 密级:confidentiality level DKBA 2826-2011.5 2011-05-10 华为机密,未经许可不得扩散 Huawei Confidential 第4页,共60页Page 4 , Total60 C语言编程规范 范范 围围: 本规范适用于公司内使用C语言编码的所有软件。本规范自发布之日起生效,对以后新编写的和修改 的代码应遵守本规范。 简简 介:介: 本规范制定

6、了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效 率、可移植各个方面对C语言编程作出了具体指导。 密级:confidentiality level DKBA 2826-2011.5 2011-05-10 华为机密,未经许可不得扩散 Huawei Confidential 第5页,共60页Page 5 , Total60 0 规范制订说明规范制订说明 0.1 前言 为提高产品代码质量,指导广大软件开发人员编写出简洁、可维护、可靠、可测试、高效、可移植的 代码,编程规范修订工作组分析、总结了我司的各种典型编码问题,并参考了业界编程规范近年来的 成果,重新对我司199

7、9年版编程规范进行了梳理、优化、刷新,编写了本规范。 本规范将分为完整版和精简版,完整版将包括更多的样例、规范的解释以及参考材料(what 这个头文件不但定义了基本数据类型WORD,还包含了stdio.h syslib.h等等不常用的头文件。如果工 程中有10000个源文件, 而其中100个源文件使用了stdio.h的printf, 由于上述头文件的职责过于庞大, 而WORD又是每一个文件必须包含的,从而导致stdio.h/syslib.h等可能被不必要的展开了9900次,大 大增加了工程的编译时间。 原则原则1.3 1.3 头文件应向稳定的方向包含头文件应向稳定的方向包含。 说明:头文件的包

8、含关系是一种依赖,一般来说,应当让不稳定的模块依赖稳定的模块,从而当不稳 定的模块发生变化时,不会影响(编译)稳定的模块。 就我们的产品来说,依赖的方向应该是:产品依赖于平台,平台依赖于标准库。产品依赖于平台,平台依赖于标准库。某产品线平台的代码 中已经包含了产品的头文件,导致平台无法单独编译、发布和测试,是一个非常糟糕的反例。 除了不稳定的模块依赖于稳定的模块外,更好的方式是两个模块共同依赖于接口除了不稳定的模块依赖于稳定的模块外,更好的方式是两个模块共同依赖于接口,这样任何一个模块 的内部实现更改都不需要重新编译另外一个模块。在这里,我们假设接口本身是最稳定的。 编者推荐开发人员使用“依赖

9、倒置依赖倒置”原则,即由使用者制定接口,服务提供者实现接口,更具体的描述 可以参见敏捷软件开发 原则 模式与实践的第二部分“敏捷设计”章节。 规则规则1.1 1.1 每一个每一个.c.c文件应有一个同名文件应有一个同名.h.h文件,用于声明需要对外公开的接口。文件,用于声明需要对外公开的接口。 说明:如果一个.c文件不需要对外公布任何接口,则其就不应当存在,除非它是程序的入口,如main 函数所在的文件。 现有某些产品中,习惯一个.c文件对应两个头文件,一个用于存放对外公开的接口,一个用于存放内 部需要用到的定义、声明等,以控制.c文件的代码行数。编者不提倡这种风格。这种风格的根源在于 源文件

10、过大,应首先考虑拆分.c文件,使之不至于太大。另外,一旦把私有定义、声明放到独立的头 文件中,就无法从技术上避免别人include之,难以保证这些定义最后真的只是私有的。 本规则反过来并不一定成立。有些特别简单的头文件,如命令ID定义头文件,不需要有对应的.c存在。 示例:对于如下场景,如在一个.c中存在函数调用关系: void foo() bar(); void bar() Do something; 必须在foo之前声明bar,否则会导致编译错误。 这一类的函数声明,应当在.c的头部声明,并声明为static的,如下: static void bar(); void foo() bar()

11、; 密级:confidentiality level DKBA 2826-2011.5 2011-05-10 华为机密,未经许可不得扩散 Huawei Confidential 第9页,共60页Page 9 , Total60 void bar() Do something; 规则规则1.2 1.2 禁止头文件循环依赖禁止头文件循环依赖。 说明:头文件循环依赖,指a.h包含b.h,b.h包含c.h,c.h包含a.h之类导致任何一个头文件修改,都 导致所有包含了a.h/b.h/c.h的代码全部重新编译一遍。而如果是单向依赖,如a.h包含b.h,b.h包含 c.h,而c.h不包含任何头文件,则修改

12、a.h不会导致包含了b.h/c.h的源代码重新编译。 规则规则1.3 1.3 .c/.h.c/.h文件禁止包含用不到的头文件文件禁止包含用不到的头文件。 说明:很多系统中头文件包含关系复杂,开发人员为了省事起见,可能不会去一一钻研,直接包含一 切想到的头文件,甚至有些产品干脆发布了一个god.h,其中包含了所有头文件,然后发布给各个项目 组使用,这种只图一时省事的做法,导致整个系统的编译时间进一步恶化,并对后来人的维护造成了 巨大的麻烦。 规则规则1.4 1.4 头文件应当自包含头文件应当自包含。 说明:简单的说,自包含就是任意一个头文件均可独立编译。如果一个文件包含某个头文件,还要包 含另外

13、一个头文件才能工作的话,就会增加交流障碍,给这个头文件的用户增添不必要的负担。 示例: 如果a.h不是自包含的,需要包含b.h才能编译,会带来的危害: 每个使用a.h头文件的.c文件,为了让引入的a.h的内容编译通过,都要包含额外的头文件b.h。 额外的头文件b.h必须在a.h之前进行包含,这在包含顺序上产生了依赖。 注意:该规则需要与“.c/.h文件禁止包含用不到的头文件”规则一起使用,不能为了让a.h自包含, 而在a.h中包含不必要的头文件。a.h要刚刚可以自包含, 不能在a.h中多包含任何满足自包含之外的其 他头文件。 规则规则1.5 1.5 总是编写内部总是编写内部#include#i

14、nclude保护符(保护符(#define #define 保护)保护)。 说明:多次包含一个头文件可以通过认真的设计来避免。如果不能做到这一点,就需要采取阻止头文 件内容被包含多于一次的机制。 通常的手段是为每个文件配置一个宏,当头文件第一次被包含时就定义这个宏,并在头文件被再次包 含时使用它以排除文件内容。 所有头文件都应当使用#define 防止头文件被多重包含,命名格式为FILENAME_H,为了保证唯一性, 更好的命名是PROJECTNAME_PATH_FILENAME_H。 注:没有在宏最前面加上“_“,即使用FILENAME_H代替_FILENAME_H_,是因为一般以“_“和”

15、_“开头的 标识符为系统保留或者标准库使用, 在有些静态检查工具中,若全局可见的标识符以“_“开头会给出告 警。 定义包含保护符时,应该遵守如下规则: 1)保护符使用唯一名称; 2)不要在受保护部分的前后放置代码或者注释。 示例:假定VOS工程的timer模块的timer.h,其目录VOS/include/timer/timer.h,应按如下方式保护: #ifndef VOS_INCLUDE_TIMER_TIMER_H 密级:confidentiality level DKBA 2826-2011.5 2011-05-10 华为机密,未经许可不得扩散 Huawei Confidential 第

16、10页,共60页Page 10 , Total60 #define VOS_INCLUDE_TIMER_TIMER_H . #endif 也可以使用如下简单方式保护: #ifndef TIMER_H #define TIMER_H #endif 例外情况:头文件的版权声明部分以及头文件的整体注释部分(如阐述此头文件的开发背景、使用注 意事项等)可以放在保护符(#ifndef XX_H)前面。 规则规则1.6 1.6 禁止在头文件中定义变量。禁止在头文件中定义变量。 说明:在头文件中定义变量,将会由于头文件被其他.c文件包含而导致变量重复定义。 规则规则1.7 1.7 只能通过包含头文件的方式使用其他只能通过包含头文件的方式使用其他.c.c提供的接口,禁止在提供的接口,禁止在.c.c中通过中通过externextern的方式使用外部的方式使用外部 函数接口、变量函数接口、变量。 说明:若A.c使用了B.c定义的foo()函数,则应当在B.h中声明

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号