软件开发编码规范07214【精选文档】_第1页
软件开发编码规范07214【精选文档】_第2页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、软件开发编码规范07214【精选文档】软件开发编码规范(C)目 录1引言41.1编写目的41.2背景41。3定义41.4参考资料42基本要求42.1程序结构要求42.2可读性要求42。3结构化要求52。4正确性与容错性要求52.5可重用性要求63用户界面设计原则64源程序书写规范64。1通用源代码格式规则64。1。1缩进64.1。2边距74.1。3“”的使用74.1.4注释74.2语句格式与语句书写规范74.2.1括号84.2.2保留字和关键字84。2。3函数84.2。4变量84.2.5语句85命名规范105。1函数命名105。2形参105.3常量和变量105.3。1常量和宏定义105。3。2

2、变量105.4函数使用说明、接口命名、NameSpace命名115。5控件的命名125.6类型125.6.1一般类型125.6.2构造类型135。6。3类类型135。7文件和文件夹135。7.1文件夹的命名规则135。7。2文件命名146源程序文档注释规范146.1注释文档的一般规范141 引言1.1 编写目的本规范旨在用规范文件的形式,对全公司使用C进行的编程过程,进行有效的规范管理,使得最终的软件产品具有良好的风格和统一的结构,且使代码可读性强、易维护。 本规范预期读者是全公司所有参与编程的软件开发人员以及其他相关人员.本标准适用于Visual C# ,其余语言作参考。1.2 背景公司在上

3、一个项目中由于代码编写风格不统一,可读性较差、较难维护,使得工作效率有所降低.1.3 定义 无1.4 参考资料Pascal Standards FAQ (E)JavaDoc (E)Doc-O-matic Document (E)Artemis Alliance Delphi Coding Standards (E)C基本书写规范C编码规范纲要2 基本要求2.1 程序结构要求程序结构清晰,简单易懂,单个函数的程序行数一般不得超过100行,个别特殊函数除外。代码中打算干什么,要简单,直接了当,代码精简,避免垃圾程序。应尽量使用。NET库函数和公共函数(无特殊情况不要使用外部方法调用windows的

4、核心动态链接库)。一般情况下,不得使用全局变量,尽量使用局部变量。2.2 可读性要求可读性第一,效率第二。(这仅对代码本身而言)。保持注释与代码完全一致。每个源程序文件,都必须有文件头说明,说明规格见“源程序文档注释规范”一节.每个函数,都必须有函数头说明,说明规格见“源程序文档注释规范”一节.主要变量(结构、联合、类或对象)定义或引用时,注释必须能反映其物理含义.处理过程的每个阶段都必须有相关注释说明.在典型算法前都必须有注释, 同时算法在满足要求的情况下应尽可能简单.利用缩进来显示程序的逻辑结构,缩进量一致以Tab键为单位,定义Tab为 4个字节。循环、分支层次不要超过五层。注释可以与语句

5、在同一行,也可以在上行。空行和空白字符也是一种特殊注释。一目了然的语句不加注释。注释的作用范围可以为:定义、引用、条件分支以及一段代码。注释行数(不包括文件头和函数头说明部份)应占总行数的 1/5 到 1/3。常量定义(const)有相应说明。2.3 结构化要求禁止出现两条等价的支路。禁止GOTO语句。用 IF 语句来强调只执行两组语句中的一组。禁止 ELSE GOTO 和 ELSE RETURN。用 CASE 实现多路分支。避免从循环引出多个出口.函数只有一个出口。不使用复杂的条件赋值语句.避免不必要的分支.不要轻易用条件分支去替换逻辑表达式。2.4 正确性与容错性要求程序首先是正确,其次是

6、优美.无法证明你的程序没有错误,因此在编写完一段程序后,应先回头检查。改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响.所有变量在调用前必须被初始化。对所有的用户输入,必须进行合法性检查。不要比较浮点数的相等,如: 10。0 * 0.1 = 1.0 , 不可靠。程序与环境或状态发生关系时,必须主动去处理发生的意外事件,如文件能否逻辑锁定、打印机是否联机等,对于明确的错误,要有明确的容错代码提示用户。单元测试也是编程的一部份,提交联调测试的程序必须通过单元测试.尽量使用规范的容错语句。 例如:trycatchfinally2.5 可重用性要求重复使用的完成相对独立功能的算法或代

7、码应抽象为服务或类。服务或类应考虑面向对象(OO)思想,减少外界联系,考虑独立性或封装性。3 用户界面设计原则除标题部分外,所有显示给用户的字体(如BUTTON和LABEL等)使用标准字体:宋体、九号、黑色;标题部分可用醒目的字体,如:宋体、小二号、红色。采用Windows缺省的风格.窗体尽量从已有的父窗体继承。方便用户对信息的输入、修改和阅读。验证用户输入的有效性和合理性.具有清晰明确的用户提示信息。使用Tab键在输入项之间移动输入焦点(可选)。标准按钮大小必须相同,使用的图像和标题必须与界面风格规范一致,如果出现该规范中没有的地方,须与项目负责人和美工协商。4 源程序书写规范4.1 通用源

8、代码格式规则4.1.1 缩进缩进就是每级间有一个Tab单位.不要在源代码中放置制表符。这是因为,制表符的宽度随着不同的设置和代码管理实用程序(打印、文档及版本控制等)而不同.沿逻辑结构行缩进代码。没有缩进,代码将变得难以理解,如: if(expression ) /此处填写你的代码块;/ if(expression ) /此处填写你的代码块;/ else /此处填写你的代码块;/缩进代码会产生出更容易阅读的代码,如: if(expression ) if(expression )/此处填写你的代码块;/else/此处填写你的代码块;/4.1.2 边距 边距设置为80个字符.源代码一般

9、不会因写一个单词而超过边距,但本规则比较灵活。只要可能,长度超过一行的语句应当用分行符换行。换行后,应缩进两个字符. 4.1.3 “”的使用“”或“”必须单独占一行。例如: 错误形式:for(i:=0;i10;i+) / 错, “" 与f o r 在同一行 正确形式:for(i:=0;i<10;i+) / 对, “"在另外一行中4.1.4 注释通常使用“/.。./”类型的块注释和“/”类型的行注释。4.2 语句格式与语句书写规范4.2.1 括号 在左括号与下一字符之间没有空格。同样,右括号与前一字符也没有空格.下面的例子演示了正确与不正确的空格。CallPr

10、oc( aParameter ); / 错!CallProc(aParameter); / 正确!4.2.2 保留字和关键字在用户的各种命名中不能单独使用保留字或关键字来进行命名。4.2.3 函数 格式函数名要能体现出该函数要实现的功能,应当以大写字母开始,且大小写交错以增加可读性(每个单词的首字母大写)。下面是一个不正确的写法:pubilc void thisisapoorlyformattedroutinename()下面是正确的写法:pubilc void ThisIsMuchMoreReadableRoutineName() 形参1)参数顺序  形

11、参的顺序主要要考虑寄存器调用规则。最常用的参数应当作为第一个参数,按使用频率依次从左到右排。输入参数位于输出参数之前。范围大的参数应当放在范围小的参数之前。例如:SomeProc(aPlanet, aContinent, aCountry, aState, aCity).  有些则例外.例如,在事件处理过程中,Object 类型的Sender 参数往往是第一个要传递的参数。2)常量参数  任何值类型参数,只要不加REF标志,都是常量参数;任何引用类型参数,都不是常量参数,不管加不加标志。4.2.4 变量 局部变量  局部变量用于过程内部,如果需要的话

12、,应当在过程的入口处立即初始化变量。 全局变量  一般不鼓励使用全局变量。不过,有时候需要用到。即使如此,也应当把全局变量限制在需要的环境中.例如,一个全局变量可能只在单元的实现部分是全局的。  全局数据如果将由许多单元使用,就应移动到一个公用单元里被所有对象使用。全局数据可在声明时直接初始化为一个值.4.2.5 语句 If 语句  在if/else语句中, if子句的条件应该直接且易于理解.为了避免出现许多if语句,可以使用switch语句代替。如果多于5级,不要使用if语句。请改用更清楚的方法.  如果在if语句中有多个条

13、件要测试,应按照计算的复杂程度从右向左排。这样,可以使代码充分利用编译器的短路估算逻辑.例如,如果Condition1比Condition2快,Condition2比Condition3快,则if语句一般应这样构造:if (Condition1 & Condition2 & Condition3)   如果Condition3为False的机会很大,利用短路估算逻辑,我们也可以将Condition3放在最前面:if (Condition3 Condition1 & Condition2) 有if出现,就必须有对应的else出现。if语句的三种形式:1) 形式一

14、(不需要else) if (Condition) Process;/else/ No Else Needed/2) 形式二(需要else,但是else里面不需要处理) if (Condition) Process;else/No Need Process3) 形式三(if里面不需要处理) if (Condition)/ No Need ProcesselseProcess; switch 语句1)概述  switch语句中每种情况的常量应当按数字或字母的顺序排列.每种情况的动作语句应当简短且通常不超过4 5 行代码.如果动作太复杂,应将代码单独放在一个函数中。switc

15、h语句的else子句只用于默认情况或错误检测。2)格式  switch语句遵循一般的缩进和命名规则。 while 语句  所有对while循环进行初始化的代码应当位于while入口前,且不要被无关的语句隔开。任何业务的辅助工作都应在循环后立即进行。 for 语句如果循环次数是确定的,应当用for语句代替while语句。5 命名规范5.1 函数命名  函数名应当有意义.进行一个动作的函数最好在名称前加上表示动作的动词为前缀。例如:public void FormatHardDrive()  设置输入参数值的函数名应当以Set 为

16、其前缀,例如:public void SetUserName()  获取数值的函数名应当以Get 为其前缀,例如:public string GetUserName()函数名称第一个字母必须使用大写字母,要求用大小写字母组合规范函数命名,必要时可用下划线间隔,示例如下:public void PrintTrackData()public void ShowChar(int aIndex, char aszMyChar)5.2 形参  所有形参的名称都应当表达出它的用途。如果合适的话,形参的名称最好以字母a 为前缀,例如:public void SomeProc(string

17、 aUserName, integer aUserAge)当参数名与类的特性或字段同名时,前缀a 就有必要了.5.3 常量和变量5.3.1 常量和宏定义  常量和宏定义必须具有一定的实际意义;常量和宏定义必须全部以大写字母,中间可根据意义的连续性用下划线连接,每一条定义的右侧必须有一简单的注释,说明其作用.资源名字定义格式:菜单:IDM_XX或者CM_XX位图:IDB_XX对话框:IDD_XX字符串:IDS_XXDLGINIT:DIALOG_XXICON:IDR_XX5.3.2 变量  变量命名必须具有一定的实际意义,形式为xAbcFgh,x由变量类型确定,Abc、Fgh表

18、示连续意义字符串,如果连续意义字符串仅两个,可都大写,如OK 。常用的变量举例如下:缩写类型举例dtDateTimedtTextszcharszTextsbsbytesbTextbtbytebtTextnintnTextuiuintuiTextllonglTextululongulTextffloatfTextddoubledTextbboolbTextdedecimaldeTextstrstringstrText 以下面字母或符号作为前缀,分别具有如下意义:x,y 坐标att 表属性c 类对象 cMain(对象实例)m_ 类成员变量 m_nVal, m_bFlags_ 类静态成员变量 s_n

19、Val,s_bFlag 局部变量局部变量遵循其他变量的命名规则。通常以“n”作为前缀.局部变量中可采用如下几个通用变量:nTemp,nResult,I,J(一般用于循环变量)。 全局变量  全局变量一般以字母“g”打头,并遵循其他变量的命名规则。5.4 函数使用说明、接口命名、NameSpace命名函数使用说明包括外来函数及内部函数的使用说明,外部引用函数必须在右侧注明函数来源: 模块名及文件名, 如是内部函数,只要注释“local module”即可.例如:strName=GetUserName(strUserId);/ local modulestrN

20、ame= GetUserName(strUserId);/ Module Name:UserManage / File Name: fm UserManage 事件函数的使用说明: public void EventHandler(object sd,Event e) /Event 表示事件响应的函数。接口命名: 接口的命名一般都以“I”作为首字母,为了和类区分,例如: interface IComnunication 命名空间:命名空间命名规则从原则上和函数命名相同。通常格式如下:NameSpace命名:N+ 部署位置 + 项目名称 + namespace名称 其他: Application

21、命名 P + 部署位置 + 项目名称5.5 控件的命名C控件规则为了和.net类库统一,分WindowsForm程序和Web程序.下面就这两部分分别描述。1)WindowsForm程序 (用小写前缀表示类别) fm 窗口cmd 按钮cob combo,下拉式列表框txt 文本输入框lab labal,标签img image,图象pic picturegrd Grid,网格scr 滚动条lst 列表框frm fram2)Web程序 (用大写前缀表示类别) Fm 窗口Cmd 按钮Cob combo,下拉式列表框Txt 文本输入框Lab labal,标签Img image,图象Pic picture

22、Grd Grid,网格Scr 滚动条Lst 列表框Frm fram5.6 类型5.6.1 一般类型 枚举型  枚举类型名必须代表枚举的用途。枚举类型的标识符列表的前缀应包含2 3 个小写字符,来彼此关联.例如:enum SongType=stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB;5.6.2 构造类型 数组类型  数组类型名应表达出该数组的用途。例如:string weekDays = new string7;字符串型数组weekDays包括7个元素。5.6.

23、2.2 结构体类型 结构体类型命名必须全部用大写字母,原则上前面以下划线开始;结构体变量命名必须用大小写字母组合,第一个字母必须使用大写字母,必要时可用下划线间隔。对于私有数据区,必须注明其所属的进程。全局数据定义只需注意其用途。示例如下:public struct DBS_DATABASEchar szProductName20; char szAuthor20; char szReleaseDate16; char szVersion10;  unsigned long MaxTables; unsigned long UsedTables; DBS_DATABASE GdataBase;5.6.3 类类型 类命名与格式  类的名称应当表达出类的用途。一般的类名前要加字母“C”,如果是接口类那么类名前要加“I”,错误异常类的类名前要加“E",而类引用类型(Class-reference type)则要在类名后加“Class”,抽象类一般是在类名前还要加“Abstract”。 属性命名规则属性的命名遵循与变量相同的规则,只不过要加前缀“f”,表示这是属性。 方法命名规则  方法的命名遵循与过程和函数相同的规则。5.7 文件和文件夹5.7.1 文件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论