Q/ZX深圳市中兴通讯股份有限公司企业标准(设计技术标准)Q/ZX04.302.1–20032003-01-04发布2003-01-06实施深圳市中兴通讯股份有限公司发布软件编程规范—C/C++Q/ZX04.302.1–2003I目次前言........................................................................II1范围.....................................................................12术语和定义...............................................................13基本原则.................................................................14布局.....................................................................24.1文件布局.........................................................24.2基本格式.........................................................54.3对齐.............................................................64.4空行空格.........................................................84.5断行............................................................105注释....................................................................116命名规则................................................................167变量、常量与类型........................................................217.1变量与常量......................................................217.2类型............................................................248表达式与语句............................................................299函数与过程..............................................................359.1参数............................................................359.2返回值..........................................................369.3内部实现........................................................379.4函数调用........................................................4010可靠性..............................................................4210.1内存使用........................................................4210.2指针使用........................................................4410.3类和函数........................................................4611可测试性............................................................5012断言与错误处理......................................................53附录A(资料性附录)编程模版............................................58附录B(资料性附录)规范检查表..........................................66参考文献....................................................................71Q/ZX04.302.1–2003II前言编写本标准的目的是为了统一公司软件编程风格,提高软件源程序的可读性、可靠性和可重用性,提高软件源程序的质量和可维护性,减少软件维护成本,最终提高软件产品生产力。本规范是针对C/C++语言的编程规范,其它不同编程语言可以参照此规范执行。本规范适用于公司所有产品的软件源程序,同时考虑到不同产品和项目的实际开发特性,本规范分成规则性和建议性两种:对于规则性规范,要求所有软件开发人员严格执行;对于建议性规范,各项目编程人员可以根据实际情况选择执行。本规范的示例都以C/C++语言描述。本规范的内容包括:基本原则、布局、注释、命名规则、变量常量与类型、表达式与语句、函数与过程、可靠性、可测性、断言与错误处理等。规范最后给出了标准模版供软件人员参考。本规范由软件编程规范C/C++小组编写,主要成员如下:技术中心研究部:李军、刘继兴技术中心成都所:左雪梅本部事业部:李晖网络事业部:田小渝、许生海、徐火顺、黄志强CDMA事业部:程远忠、吴应祥移动事业部:吴从海、王宏伟软件编程规范有系列标准,包括:C/C++规范、GUI规范、Delphi规范、Java规范。本标准的附录A、附录B是资料性附录。自本标准实施之日起,以后新编写的和修改的代码均应执行本标准。本标准由深圳市中兴通讯股份有限公司技术中心研究部提出,技术中心技术管理部归口。本标准起草部门:技术中心研究部。本标准主要起草人:软件编程规范小组。本标准于2003年1月首次发布。Q/ZX04.302.1–200311范围本标准规定了C/C++语言的编程规范。本标准适用于公司内使用C/C++语言编码的所有软件。本规范自生效之日起,对以后新编写的和修改的代码有约束力。2术语和定义下列术语和定义适用于本标准。2.1原则编程时应该坚持的指导思想。2.2规则编程时必须遵守的约定。2.3建议编程时必须加以考虑的约定。2.4说明对此规则或建议的必要的解释。2.5正例对此规则或建议给出的正确例子。2.6反例对此规则或建议给出的反面例子。3基本原则说明:这是软件开发的基本要点,软件的生命周期贯穿产品的开发、测试、生产、用户使用、版本升级和后期维护等长期过程,只有易读、易维护的软件代码才具有生命力。说明:简单是最美。保持代码的简单化是软件工程化的基本要求。不要过分追求技巧,否则会降低程序的可读性。【原则1-1】首先是为人编写程序,其次才是计算机。【原则1-2】保持代码的简明清晰,避免过分的编程技巧。【原则1-3】所有的代码尽量遵循ANSIC标准。软件编程规范—C/C++Q/ZX04.302.1–20032说明:所有的代码尽可能遵循ANSIC标准,尽可能不使用ANSIC未定义的或编译器扩展的功能。说明:编程首先考虑的是满足正确性、健壮性、可维护性、可移植性等质量因素,最后才考虑程序的效率和资源占用。说明:过多地使用全局变量,会导致模块间的紧耦合,违反模块化的要求。说明:尽量选择可借用的代码,对其修改优化以达到自身要求。说明:事实上,我们无法做到完全消除错误,但通过不懈的努力,可以减少同样的错误出现的次数。4布局程序布局的目的是显示出程序良好的逻辑结构,提高程序的准确性、连续性、可读性、可维护性。更重要的是,统一的程序布局和编程风格,有助于提高整个项目的开发质量,提高开发效率,降低开发成本。同时,对于普通程序员来说,养成良好的编程习惯有助于提高自己的编程水平,提高编程效率。因此,统一的、良好的程序布局和编程风格不仅仅是个人主观美学上的或是形式上的问题,而且会涉及到产品质量,涉及到个人编程能力的提高,必须引起大家重视。4.1文件布局【原则1-4】编程时首先达到正确性,其次考虑效率。【原则1-5】避免或少用全局变量。【原则1-6】尽量避免使用GOTO语句。【原则1-7】尽可能重用、修正老的代码。【原则1-8】尽量减少同样的错误出现的次数。【规则2-1-1】遵循统一的布局顺序来书写头文件。Q/ZX04.302.1–20033说明:以下内容如果某些节不需要,可以忽略。但是其它节要保持该次序。头文件布局:文件头(参见第三章“注释”)#ifndef文件名_H(全大写)#define文件名_H其它条件编译选项#include(依次为标准库头文件、非标准库头文件)常量定义全局宏全局数据类型类定义模板(template)(包括C++中的类模板和函数模板)全局函数原型#endif说明:以下内容如果某些节不需要,可以忽略。但是其它节要保持该次序。实现文件布局:文件头(参见第三章“注释”)#include(依次为标准库头文件、非标准库头文件)常量定义文件内部使用的宏文件内部使用的数据类型全局变量本地变量(即静态全局变量)局部函数原型类的实现全局函数局部函数正例:/************************************************************数据类型定义************************************************************/typedefunsignedcharBOOLEAN;【规则2-1-2】遵循统一的布局顺序来书写实现文件。【规则2-1-3】使用注释块分离上面定义的节。Q/ZX04.302.1–20034/**************************************************************函数原型*************************************************************/intDoSomething(void);说明:可以通过宏定义来避免重复包含。正例:#ifndefMODULE_H#defineMODULE_H[文件体]#endif正例:#includestdio.h#include“heads.h”说明:类的定义(在定义文件中)按如下顺序书写:公有属性公有函数保护属性保护函数私有属性私有函数类的实现(在实现文件中)按如下顺序书写:构造函数析构函数公有函数保护函数私有函数【规则2-1-4】头文件必须要避免重复包含。【规则2-1-5】包含标准库头文件用尖括号,包含非标准库头文件用双引号“”。【规则2-1-6】遵循统一的顺序书写类的定义及实现。Q/ZX04.302.1–200354.2基本格式说明:包括空格在内不超过80列。说明:这样可以防止书写失误,也易于阅读。正例:if(varible1varible2){varible1=varible2;}反例:下面的代码执行语句紧跟if的条件之后,而且没有加{},违反规则。if(varible1varible2)varible1=varible2;正例:float*pfBuffer;反例:float*pfBuffer;说明:这样便于程序阅读和查找。