ImageVerifierCode 换一换
格式:DOCX , 页数:81 ,大小:55.24KB ,
资源ID:23126470      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23126470.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(软件编程规范CCpp.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

软件编程规范CCpp.docx

1、软件编程规范CCpp软件编程规范-C/C+篇目 录目 录 2前 言 31 基本原则 42. 布局 62.1 文件布局 62.2 基本格式 82.3 对齐 92.4 空行空格 112.5 断行 133. 注释 144. 命名规则 195. 变量、常量与类型 245.1 变量与常量 245.2 类型 276. 表达式与语句 337. 函数与过程 407.1 参数 407.2 返回值 417.3 内部实现 427.4 函数调用 458. 可靠性 478.1 内存使用 478.2 指针使用 498.3 类和函数 509. 可测试性 5610. 断言与错误处理 59前 言软件编程规范的目的是为了统一公司

2、软件编程风格,提高软件源程序的可读性、可靠性和可重用性,提高软件源程序的质量和可维护性,减少软件维护成本,最终提高软件产品生产力。本规范是针对C/C+语言的编程规则,其它不同编程语言可以参照此规范的基本原则。本规范适用于公司所有产品的软件源程序,同时考虑到不同产品和项目的实际开发特性,本规范分成规则性和建议性两种:对于规则性规范,要求所有软件开发人员严格执行;对于建议性规范,各项目编程人员可以根据实际情况选择执行。本规范的示例都以C/C+语言给出。本规范的内容包括:基本原则、布局、注释、命名规则、变量常量与结构、表达式与语句、函数与过程、可靠性、可测性、断言与错误处理等。规范最后给出了规范的模

3、板供软件人员参考。对本规范中所使用的术语解释如下:规则:编程时必须遵守的原则。建议:编程时必须加以考虑的原则。说明:对此规则或建议的必要的解释。正例:对此规则或建议给出的正确例子。反例:对此规则或建议给出的反面例子。1 基本原则【原则1-1】首先为人编写程序,其次才是计算机。说明:这是软件开发的基本要点,软件的生命周期贯穿产品的开发、测试、生产、用户使用、版本升级和后期维护等长期过程,只有易读、易维护的软件代码才具有生命力。【原则1-2】保持代码的简明清晰,避免过分的技巧。说明:简单是最美。保持代码的简单化是软件工程化的基本要求。不要过分追求技巧,否则会降低程序的可读性。【原则1-3】所有的代

4、码必须遵循ANSI C标准。说明:例如函数的原型声明中,必须包含类型定义。【原则1-4】编程时首先达到正确性,其次考虑效率。说明:编程首先考虑的是满足正确性、健壮性、可维护性、可移植性等质量因素,最后才考虑程序的效率和资源占用。【原则1-5】保持一致性,尽可能多的使用相同的规则。【原则1-6】避免或少用全局变量。说明:过多地使用全局变量,会将模块间耦合过紧,违反模块化的要求。【原则1-7】禁止使用GOTO语句。【原则1-8】尽可能复用、修正老的代码。说明:选择代码完全重建不是一条最优的选择,如果可能,尽量选择可借用的代码,对其修改优化以达到自身要求。【原则1-9】 紧凑的代码并不能保证得到高效

5、、稳定的机器代码。说明:防止患有“一行清”疾病,即为了把代码尽量写在源代码的一行上,使用一些稀奇古怪的表达式。“多行源代码可能产生效率高的机器代码”。【原则1-10】决不允许同样错误出现两次。说明:事实上,我们无法做到完全消除错误,但通过不懈的努力,可以减少同样的错误出现的次数。2. 布局程序布局的目的是显示出程序良好的逻辑结构,提高程序的准确性、连续性、可读性、可维护性。更重要的是,统一的程序布局和编程风格,有助于提高整个项目的开发质量,提高开发效率,降低开发成本。同时,对于普通程序员来说,养成良好的编程习惯有助于提高自己的编程水平,提高编程效率。因此,统一的、良好的程序布局和编程风格不仅仅

6、是个人主观美学上的或是形式上的问题,而是一个涉及到产品质量,涉及到个人编程能力的提高,必须引起大家重视。2.1 文件布局【规则2-1-1】 遵循统一的布局顺序来书写头文件。说明:以下内容如果某些节不需要,可以忽略。但是其它节要保持该次序。头文件布局: 文件头(参见第三章“注释”)#ifndef 文件名_H(全大写)#define 文件名_H其它条件编译选项 #include(依次为标准库头文件、非标准库头文件)常量定义 全局宏 全局数据类型 类定义模板(template)(包括C+中的类模板和函数模板)extern声明全局函数原型#endif【规则2-1-2】 遵循统一的布局顺序来书写实现文件

7、。说明:以下内容如果某些节不需要,可以忽略。但是其它节要保持该次序。实现文件布局: 文件头(参见第三章“注释”) #include(依次为标准库头文件、非标准库头文件) 常量定义 文件内部使用的宏 文件内部使用的数据类型全局变量本地变量(即静态全局变量) 局部函数原型类的实现 全局函数局部函数【规则2-1-3】 使用注释块分离上面定义的节。正例:/ * * 数据类型定义 * * / typedef unsigned char BOOLEAN; /* * 函数原型 * */ int DoSomething(void);【规则2-1-4】 头文件必须要避免重复包含。说明:通过宏定义来避免重复包含。

8、正例:#ifndef MODULE_H #define MODULE_H 文件体 #endif【规则2-1-5】 包含标准库头文件用尖括号 ,包含非标准库头文件用双引号 “ ”。正例:#include #include “heads.h”【规则2-1-5】遵循统一的顺序书写类的定义及实现。说明:类的定义(在定义文件中)按如下顺序书写: 公有属性 公有函数 保护属性 保护函数 私有属性 私有函数类的实现(在实现文件中)按如下顺序书写: 构造函数析构函数公有函数保护函数私有函数2.2 基本格式【规则2-2-1】 程序中一行的代码和注释不能超过80列。说明:包括空格在内不超过80列。【规则2-2-2

9、】if、else、else if、for、while、do等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加 。说明:这样可以防止书写失误,也易于阅读。正例:if (varible1 varible2) varible1 = varible2;反例:下面的代码执行语句紧跟if的条件之后,而且没有加,违反规则。if (varible1 ”这类操作符前后不加空格。正例:!bValueiValue+iCount*strSource&fSumaiNumberi = 5;tBox.dWidth tBox-dWidth 【规则2-4-3】多元运算符和它们的操作数之间至少需要一个空格。正例:fV

10、alue = fOldValue;fTotal + fValueiNumber += 2;【规则2-4-4】关键字之后要留空格。说明:if、for、while等关键字之后应留一个空格再跟左括号(,以突出关键字。【规则2-4-5】函数名之后不要留空格。说明:函数名后紧跟左括号(,以与关键字区别。【规则2-4-6】(向后紧跟,)、,、;向前紧跟,紧跟处不留空格。,之后要留空格。;不是行结束符号时其后要留空格。正例:例子中的 凵 代表空格。 for凵(i凵=凵0;凵i凵凵MAX_BSC_NUM;凵i+)DoSomething(iWidth,凵iHeight);【规则2-4-7】注释符与注释内容之间要

11、用一个空格进行分隔。正例:/* 注释内容 */ 注释内容反例: /*注释内容*/注释内容2.5 断行【规则2-5-1】长表达式(超过80列)要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。说明:条件表达式的续行在第一个条件处对齐。for循环语句的续行在初始化条件语句处对齐。函数调用和函数声明的续行在第一个参数处对齐。赋值语句的续行应在赋值号处对齐。正例:if (iFormat = CH_A_Format_M) & (iOfficeType = CH_BSC_M) / 条件表达式的续行在第一个条件处对齐 DoSomethi

12、ng();for (long_initialization_statement;long_condiction_statement; / for循环语句续行在初始化条件语句处对齐long_update_statement) DoSomething();/ 函数声明的续行在第一个参数处对齐BYTE ReportStatusCheckPara(HWND hWnd, BYTE ucCallNo, BYTE ucStatusReportNo);/ 赋值语句的续行应在赋值号处对齐fTotalBill = fTotalBill + faCustomerPurchasesiID+ fSalesTax(faC

13、ustomerPurchasesiID);【规则2-5-2】函数声明时,类型与名称不允许分行书写。正例:extern double FAR CalcArea(double dWidth, double dHeight);反例:extern double FAR CalcArea(double dWidth, double dHeight);3. 注释注释有助于理解代码,有效的注释是指在代码的功能、意图层次上进行注释,提供有用、额外的信息,而不是仅仅代码的表面意义的简单重复。【规则3-1】C语言的注释符为“/* */”。C+语言中,多行注释采用“/* */”,单行注释采用“/ ”。【规则3-2】

14、一般情况下,源程序有效注释量必须在20以上。说明:注释的原则是有助于对程序的阅读理解,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。有效的注释是指在代码的功能、意图层次上进行注释,提供有用、额外的信息,而不是仅仅代码的表面意义的简单重复。【规则3-3】注释使用中文。说明:对于特殊要求的可以使用英文注释,如工具不支持或国际化版本。【规则3-4】文件头部必须进行注释,包括:.h文件、.c文件、.cpp文件、.inc文件、.def文件、编译说明文件.cfg等。说明:注释必须列出:版权信息、文件标识、内容摘要、版本号、作者、完成日期、修改信息等。正例:下面是文件头部的中文注释:/* 版权所有

15、(C)2001, 南京汉德森科技股份有限公司。* * 文件名称: / 文件名* 文件标识: / 见配置管理计划书* 内容摘要: / 简要描述本文件的内容,包括主要模块、函数及其功能的说明* 其它说明: / 其它内容的说明* 当前版本: / 输入当前版本* 作 者: / 输入作者名字及单位* 完成日期: / 输入完成日期,例:2000年2月25日* * 修改记录1:/ 修改历史记录,包括修改日期、修改者及修改内容* 修改日期:* 版 本 号:* 修 改 人:* 修改内容: * 修改记录2:*/下面是文件头部的英文注释:/* Copyright (C) 2001, Handson Co.,Ltd.

16、* * File Name: / 文件名 (注释对齐)* File Mark: / 见配置管理计划书* Description: / 简要描述本文件的内容,完成的主要功能* Others: / 其它内容的说明* Version: / 输入当前版本* Author: / 输入作者名字及单位* Date: / 输入完成日期,例:2001-12-12* * History 1: / 修改历史记录,包括修改日期、修改者及修改内容* Date: * Version:* Author: * Modification: * History 2: */【规则3-5】函数头部应进行注释,列出:函数的目的/功能、

17、输入参数、输出参数、返回值、访问和修改的表、历史信息等。说明:注释必须列出:函数名称、功能描述、输入参数、输出参数、返 回 值、修改信息等。正例:下面是函数头部的中文注释:/* 函数名称: / 函数名称* 功能描述: / 函数功能、性能等的描述* 访问的表: /(可选)被访问的表,此项仅对于有数据库操作的程序* 修改的表: /(可选)被修改的表,此项仅对于有数据库操作的程序* 输入参数: / 输入参数说明,包括每个参数的作用、取值说明及参数间关系* 输出参数: / 对输出参数的说明。* 返 回 值: / 函数返回值的说明 * 其它说明: / 其它说明* 修改日期 版本号 修改人 修改内容* -

18、* 2002/08/01 V1.0 XXXX XXXX*/下面是函数头部的英文注释:/* Function: / 函数名称(注释对齐)* Description: / 函数功能、性能等的描述* Table Accessed: /(可选)被访问的表,此项仅对于有数据库操作的程序* Table Updated: /(可选)被修改的表,此项仅对于有数据库操作的程序* Input: / 输入参数说明,包括每个参数的作用、取值说明以及参数间关系* Output: / 对输出参数的说明* Return: / 函数返回值的说明 * Others: / 其它说明* Modify Date Version Au

19、thor Modification* -* 2002/08/01 V1.0 XXXX XXXX*/【规则3-6】包含在 中代码块的结束处应加注释,便于阅读。特别是多分支、多重嵌套的条件语句或循环语句。说明:此时注释可以用英文,方便查找对应的语句。正例: void Main()if () while () /* end of while () */ / 指明该条while语句结束 /* end of if () */ / 指明是哪条语句结束 /* end of void main()*/ / 指明函数的结束【规则3-7】保证代码和注释的一致性。修改代码同时修改相应的注释,不再有用的注释要删除。【

20、规则3-8】注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。说明:在使用缩写时或之前,应对缩写进行必要的说明。正例: 如下书写比较结构清晰/* 获得子系统索引 */iSubSysIndex = aDataiIndex.iSysIndex;/* 代码段1注释 */ 代码段1 /* 代码段2注释 */ 代码段2 反例1:如下例子注释与描述的代码相隔太远。/* 获得子系统索引 */iSubSysIndex = aDataiIndex.iSysIndex;反例2:如下例子注释不应放在所描述的代码下面。iSubS

21、ysIndex = aDataiIndex.iSysIndex; /* 获得子系统索引 */反例3:如下例子,显得代码与注释过于紧凑。/* 代码段1注释 */ 代码段1 /* 代码段2注释 */ 代码段2 【规则3-9】全局变量要有详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。正例:/* 变量作用:(错误状态码)* 变量范围:例如0 - SUCCESS 1 - Table error * 访问说明:(访问的函数以及方法)*/BYTE g_ucTranErrorCode; 【规则3-10】注释与所描述内容进行同样的缩排。说明:可使程序排版整齐,并方便注释的阅读

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

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