编程类型-措施员们都应该这样写代码
副标题#e#
根基要求
1.1 措施布局清析,简朴易懂,单个函数的措施行数不得高出100行。
1.2 规划干什么,要简朴,直接了当,代码精简,制止垃圾措施。
1.3 只管利用尺度库函数和民众函数。
1.4 不要随意界说全局变量,只管利用局部变量。
1.5 利用括号以制止二义性。
2.可读性要求
2.1 可读性第一,效率第二。
2.2 保持注释与代码完全一致。
2.3 每个源措施文件,都有文件头说明,说明规格见类型。
2.4 每个函数,都有函数头说明,说明规格见类型。
2.5 主要变量(布局、连系、类或工具)界说或引用时,注释能反应其寄义。
2.7 常量界说(DEFINE)有相应说明。
2.8 处理惩罚进程的每个阶段都有相存眷释说明。
2.9 在典范算法前都有注释。
2.10 操作缩进来显示措施的逻辑布局,缩进量一致并以Tab键为单元,界说Tab为 6个字节。
2.11 轮回、分支条理不要高出五层。
2.12 注释可以与语句在同一行,也可以在上行。
2.13 空行和空缺字符也是一种非凡注释。
2.14 一目了然的语句不加注释。
2.15 注释的浸染范畴可觉得:界说、引用、条件分支以及一段代码。
2.16 注释行数(不包罗措施头和函数头说明部份)应占总行数的 1/5 到 1/3 。
3. 布局化要求
3.1 克制呈现两条等价的支路。
3.2 克制GOTO语句。
3.3 用 IF 语句来强调只执行两组语句中的一组。克制 ELSE GOTO 和 ELSE RETURN。
3.4 用 CASE 实现多路分支。
3.5 制止从轮回引出多个出口。
3.6 函数只有一个出口。
3.7 不利用条件赋值语句。
3.8 制止不须要的分支。
3.9 不要等闲用条件分支去替换逻辑表达式。
4. 正确性与容错性要求
4.1 措施首先是正确,其次是美妙
4.2 无法证明你的措施没有错误,因此在编写完一段措施后,应先转头查抄。
4.3 改一个错误时大概发生新的错误,因此在修改前首先思量对其它措施的影响。
4.4 所有变量在挪用前必需被初始化。
4.5 对所有的用户输入,必需举办正当性查抄。
4.6 不要较量浮点数的相等,
如: 10.0 * 0.1 == 1.0 , 不行靠
4.7 措施与情况或状态产生干系时,必需主动去处理惩罚产生的意外事件,如文件可否逻辑锁定、打印机是否联机等。
4.8 单位测试也是编程的一部份,提交联调测试的措施必需通过单位测试。
#p#副标题#e#
5. 可重用性要求
5.1 反复利用的完成相对独立成果的算法或代码应抽象为民众控件或类。
5.2 民众控件或类应思量OO思想,淘汰外界接洽,思量独立性或封装性。
5.3 民众控件或类应成立利用模板。
附:C++ 编程类型,delphi作相应的参考
.1合用范畴
本尺度合用于操作Visul C++ ,Borland C++举办软件措施开拓的人员.。
.2变量定名
定名必需具有必然的实际意义,形式为xAbcFgh,x由变量范例确定,Abc、Fgh暗示持续意义字符串,假如持续意义字符串仅两个,可都大写.如OK.
具编制程:
BOOL范例 bEnable;
ch * char chText
c * 类工具 cMain(工具实例)
h * Handle(句柄) hWnd
i * int
n * 无标记整型
p * 指针
sz,str * 字符串
w WORD
x,y 坐标
Char可能TCHAR范例 与Windows API有直接接洽的用szAppName[10]形式不然用FileName[10]形式,单个字符也可用小写字母暗示;
Int范例 nCmdShow;
LONG范例 lParam;
UINT范例 uNotify;
DWORD范例 dwStart;
PSTR范例 pszTip;
LPSTR范例 lpCmdLine
LPTSTR范例 lpszClassName;
LPVOID范例 lpReserved
WPARAM范例 wParam,
LPARAM范例 lParam
HWND范例 hDlg;
HDC范例 hDC;
HINSTANCE范例 hInstance
HANDLE范例 hInstance,
HICON范例 hIcon;
int iTmp
float fTmp
DWORD dw*
String , AnsiString str *
m_ 类成员变量 m_nVal, m_bFlag
g_ 全局变量 g_nMsg, g_bFlag
局部变量中可回收如下几个通用变量:nTemp,nResult,I,J(一般用于轮回变量)。
其他资源句柄同上
.3常量定名和宏界说
常量和宏界说必需具有必然的实际意义;
常量和宏界说在#include和函数界说之间;
常量和宏界说必需全部以大写字母来撰写,中间可按照意义的持续性用下划线毗连,每一条界说的右侧必需有一简朴的注释,说明其浸染;
资源名字界说名目:
菜单:IDM_XX可能CM_XX
位图:IDB_XX
对话框:IDD_XX
字符串:IDS_XX
DLGINIT:DIALOG_XX
ICON:IDR_XX
.4函数定名
函数原型说明包罗引用外来函数及内部函数,外部引用必需在右侧注明函数来历: 模块名及文件名, 如是内部函数,只要注释其界说文件名;
第一个字母必需利用大写字母,要求用巨细写字母组合类型函数定名,须要时可用下划线隔断,示譬喻下:
void UpdateDB_Tfgd (TRACK_NAME); //Module Name :r01/sdw.c
void PrintTrackData (TRACK_NAME); //Module Name :r04/tern.c
void ImportantPoint (void); //Module Name :r01/sdw.c
void ShowChar (int , int , chtype); //Local Module
void ScrollUp_V (int , int); //Local Module
.5布局体定名
#p#分页标题#e#
布局体范例定名必需全部用大写字母,原则上前面以下划线开始;布局体变量定名必需用巨细写字母组合,第一个字母必需利用大写字母,须要时可用下划线隔断。对付私有数据区,必需注明其所属的历程。全局数据界说只需留意其用途。
示譬喻下:
typedef struct
{
char szProductName[20];
char szAuthor[20];
char szReleaseDate[16];
char szVersion[10];
unsigned long MaxTables;
unsigned long UsedTables;
}DBS_DATABASE;
DBS_DATABASE GdataBase;
6 控件的定名:
用小写前缀暗示种别:
fm 窗口
cmd 按钮
cob combo,下拉式列表框
txt 文本输入框
lab labal,标签
img image,图象
pic picture
grd Grid,网格
scr 转动条
lst 列表框
frm fram
7注释
原则上注释要求利用中文;
文件开始注释内容包罗:公司名称、版权、作者名称、时间、模块用途、配景先容等,巨大的算法需要加上流程说明;
函数注释包罗:输入、输出、函数描写、流程处理惩罚、全局变量、挪用样例等,巨大的函数需要加上变量用途说明;
措施中注释包罗:修改时间和作者、利便领略的注释等;
引用一: 文件开头的注释模板
/******************************************************************
** 文件名:
** Copyright (c) 1998-1999 *********公司技能开拓部
** 建设人:
** 日 期:
** 修改人:
** 日 期:
** 描 述:
**
** 版 本:
**—————————————————————————–
******************************************************************/
引用二: 函数开头的注释模板
/*****************************************************************
** 函数名:
** 输 入: a,b,c
** a—
** b—
** c—
** 输 出: x—
** x 为 1, 暗示…
** x 为 0, 暗示…
** 成果描写:
** 全局变量:
** 挪用模块:
** 作 者:
** 日 期:
** 修 改:
** 日 期:
** 版本
****************************************************************/
引用三: 措施中的注释模板
/*———————————————————-*/
/* 注释内容 */
/*———————————————————-*/
8 措施
a. 措施编码力争简捷,布局清晰,制止太多的分支布局及过分于能力性的措施,只管不回收递归模式。
b. 编写措施时,亦必需想好测试的要领,换句话说,”单位测试” 的测试方案应在措施编写时一并拟好。
c. 注释必然要与措施一致。
d. 版本封存今后的修改必然要将老语句用/* */ 关闭,不能自行删除或修改,并要在文件及函数的修改记录中加以记录。
e. 措施中每个block 的开头 ”{" 及 "}” 必需对齐,嵌套的block 每进一套,缩进一个tab,TAB 为4个空格,block范例包罗if、for、while、do等要害字引出的。
f. 对付较量大的函数,每个block 和非凡的函数挪用,都必需注明其成果,举譬喻下:
count.divisor = 1193280 / freq; // compute the proper count
OutByte((unsigned short)67, (unsigned char)182); // tell 8253 that acount is coming
OutByte((unsigned short)66, count. c[0]); // send low-order byte
OutByte((unsigned short)66, count. c[1]); // send high-order byte
×××××××××××××××××××××××××××××××××××××××
bcb,delphi中的变量定名:
遵循匈牙利定名法,定名必需有意义,拟定如下划定
窗体: 以大写的W开始,如About版权窗体, 定名为WAbout
文件:以大写的F开始,如About版权窗体,文件定名为FAbout.cpp
按钮(Button):如退出按钮,定名为btnExit
……
基类: 加base标志,如报表基类,窗体定名为:WBaseRep, 文件定名为FBaseRep.cpp