编程规范

1. 软件工程师培训系列教材
     编程规范
     
2. 编程规范

3. 概述
  基本要求
  可读性要求
  结构化要求
  正确性与容错性要求
  可重用性要求
  命名规范
  注释规范
  编程风格
 
4. 总则
   程序设计绝对是一门艺术,而不仅仅是一门技术。
   程序设计的出发点是给别人看,可读、易理解、好维护,
   如果你的程序只能自己来维护,到你离开这个程序时,你的程序也就与你一起离开了这个世界。
  
5. 模块1:编程要求

6. 基本要求
  程序结构清晰简单易懂,单个函数的程序行数不得超过100行。
  打算干什么,要简单,直接了当,代码精简,避免垃圾程序。
  尽量使用标准库函数和公共函数
  不要随意定义全局变量,尽量使用局部变量
  使用括号以避免二义性
 
7. 可读性要求    
  可读性第一,效率第二。
  保持注释与代码完全一致
  每个源程序文件,都有文件头说明,说明规格见规范
  每个函数,都有函数头说明,说明规格见规范
  主要变量(结构、联合、类或对象)定义或引用时,注释能反映其含义
  常量定义(DEFINE)有相应说明
 
8. 可读性要求
   处理过程的每个阶段都有相关注释说明
   在典型算法前都有注释
   利用缩进来显示程序的逻辑结构,缩进量一致并以Tab键为单位
   循环、分支层次不要超过五层
   注释可以与语句在同一行,也可以在上行
  
9. 可读性要求
   空行和空白字符也是一种特殊的注释
   一目了然的语句不加注释
   注释的作用范围可以为:定义、引用、条件分支以及一段代码
   注释行数(不包括程序头和函数头说明部分)应占总行数的1/5到1/3
  
10. 结构化要求  
   禁止出现两条等价的支路
   禁止GOTO语句
   用IF语句来强调只执行两组语句中的一组。禁止ELSE GOTO和ELSE RETURN
   用CASE实现多路分支

11. 结构化要求     
  避免从循环引出多个出口
  函数只有一个出口
  不使用条件赋值语句
  避免不必要的分支
  不要轻易用条件分支去替换逻辑表达式
  
12. 正确性与容错性要求
  程序首先是正确,其次是优美
  无法证明你的程序没有错误,因此在编写完一段程序后,应先回头检查
  改一个错误时可能产生新的错误,因此在修改前首先考虑对其它程序的影响
  所有变量在调用前必须被初始化
  
13. 正确性与容错性要求
  对所有的用户输入,必须进行合法性检查
  不要比较浮点数的相等,如:10.0*0.1 == 1.0,不可靠
  程序与环境或状态发生关系时,必须主动去处理发生的意外事件,如文件能否逻辑锁定,打印机是否联机等
  单元测试也是编程的一部分,提交联调测试的程序必须通过单元测试
  
14. 可重用性要求
  重复使用的完成相对独立功能的算法或代码应抽象为公共控件或类
  公共控件或类应考虑OO思想,减少外界联系,考虑独立性或封装性
  公共控件或类应建立使用模板
  
15. 模块2:编程规范
  
16. 命名规范
  变量命名
  函数命名
  
17. 变量命名
  命名必须具有一定的实际意义,形式为xAbcFgh,x由变量类型确定,Abc、Fgh表示连续意义字符串,如果连续意义字符串仅两个,可都大写,如OK
  含义清晰,不易混淆
  不和其它模块、系统API的命名空间相冲突
  
18. 变量命名
  有意识的为变量名、宏名加上本模块的关键字,就不至于和其它模块、系统API的命名空间相冲突
   例如:宏的名称过短,如:"DEBUG"或"_DEBUG",很可能和别的模块、系统模块相冲突
  局部变量尤其是循环变量,使用约定俗成的i,j,k
  宏、常量、枚举enum,全部用大写字母
  全局变量加上前缀"g",后面跟上首字母大写的单词,如:g_全局变量 g_bFlag
  
19. 函数命名                  
  函数原型说明包括引用外来函数及内部函数,外部引用必须在右侧注明函数来源、模块名及文件名,如是内部函数,只要注释其定义文件名
  第一个字母必须使用大写字母,要求用大小写字母组合规范函数命名,必要时可用下划线间隔,示例如下:
  void UpdateDB_Tfgd(TRACK_NAME); //Module Name: r01/sdw.c
  
20. 函数命名
  模块化
   某一功能,如果重复实现三遍以上,即应考虑模块化,将它写成通用函数,并向小组成员发布。同时也要尽可能利用其它人的现成模块。
   模块化的一些注意事项
   1. 设计好模块接口,用面向对象的观点看,包括:函数接口和变量接口
   2. 定义好接口以后不要轻易改动,并在模块开头(文件的开头或函数的开头)加以说明
   3. 不要在外部使用接口以外的其它函数或变量
   4. 注意全局变量也是一种接口
   5. 接口即是罗列出一个模块的所有的与外部打交道的变量、函数等
   
21. 格式规范
  缩进用Tab,不用空格
  一个Tab定义为四个空格
  标点符号的右边留一个空格(左括号除外)   
  赋值、判断、运算符号两边都要加一个空格
  空行也是注释,适当的空行使逻辑更清楚,函数内部不应该有连续空行,函数之间至少有两个连续空行
  
22. 注释规范
  文件注释
  函数注释
  变量注释
  其它
  
23. 文件注释
  文件开始注释内容包括:公司名称、版权、作者名称、时间、模块用途、背景介绍等,复杂的算法需要加上流程说明
  文件开头的注释模板
  /******************************************************************
  **文件名:  
  **版权:
  **创建人:
  **日期:
  **修改人:
  **日期:
  **描述:
  **
  **版本:
  **-----------------------------------------------------------------
  ******************************************************************/
  
24. 函数注释
  函数注释包括:输入、输出、函数描述、流程处理、全局变量、调用样例等,
  复杂的函数需要加上变量用途说明:
  函数开头的注释模板        
  /******************************************************************
  **函数名:  
  **输入:a, b, c
  **a---
  **b---
  **c---
  **输出:x---
  **x为1,表示...
  **x为0,表示...
  **功能描述:
  **全局变量:
  **调用模块:
  **作者:
  **日期:
  **修改:
  **日期:
  **版本:
  ******************************************************************/               
  
25. 同24,印刷错误

26. 变量及其它
  变量:对于非通用的变量,请在定义时加以注释说明,变量定义尽可能放在最开始处。
  其它:函数内各功能模块,如:循环、流程的各分支等,尽可能多的加以注释
  
27. 编程风格
  严格采用梯形层次对应好各层次:
  int main()
  {
   int i, j;
   ......
   for(i == 0; i < 100; i ++)
   {
    ......
    ......
    if(i == 0)
    {
     ......
     ......
    }
    ......
    ......
   }
   ......
  }

28. 编程风格
  注意错误处理:
  编程中要考虑函数的各种执行情况,尽可能处理所有流程情况,将函数分两类:
  一类为与屏幕的显示无关  
  二类为与屏幕的显示有关
  
  对于与屏幕显示无关的函数,函数通过返回值来报告错误
  对于与屏幕显示无关的函数,函数要负责向用户发出警告,并进行错误处理
  
29. 编程风格
  错误处理代码一般放在函数末尾,如下(以VB程序为例):  
   ......
   On Error Goto errHandle
   ......
   Exit Sub
  errHandle:
   Select Case Err
   Case 1:
    ...
   Case 2:
    ...
   Case Else:
    ...
   End Select
  End Sub
   对于通用的错误处理,可建立通用的错误处理函数,处理常见的通用的错误
   
30.    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值