测绘程序设计编程规范
测绘程序设计测绘程序设计 编程规范编程规范 (Visual C+.netVisual C+.net) (供测绘(供测绘工程专业用)工程专业用) (20112011 年)年) 戴吾蛟戴吾蛟 编编 二零二零一一零年零年元元月月 中南大学测绘与国土信息工程系中南大学测绘与国土信息工程系 编程规范编程规范 一一、命名约定命名约定 变量的命名通常由两部分组成:以变量类型的缩写开头,通常是小写;后面是表示变量的含义 的若干单词,单词的第一个字母大写,其余字母小写,单词之间不空格。 下表是常见类型的缩写,其它变量如类的实例变量、自定义类型(如结构、联合等) ,其类型 的缩写为类名每个单词的第一个字母。 常见类型变量前缀命名规则一览表 序号 类 型 缩写 举例 1 整型变量(int) i int iCount 2 无符号整型变量(unsigned int) u unsigned int uLength 3 短整型变量(short) n short nCount 4 长整型变量(long) l long lSequenceNo 5 无符号长整型变量(unsigned long) ul unsigned long ulSize 6 浮点型(float) f float fWeight 7 双浮点型(double) d double dLength 8 字节变量(byte) by BYTE byBuffer 9 字变量(word) w WORD wSize 10 双字变量(dword) dw DWORD dwSize 11 字符变量(char) ch char chBuffer 12 字符串变量(cstring) str String strBuffer 13 布尔变量(boolean) b boolean bFlag 14 句柄变量(handle) h handle hDC,hWnd 15 枚举变量(enum) e enum eMonths 16 指针变量(*) p int *piCount 17 数组变量(array) a array of WORDs:awVar 说明: 1.如果是指向上述类型的指针,就在上面规范前加 “p“ ; 2.如果是指向上述类型的双重指针,就在上面规范前加 “pp“ ; 3.如果是类成员变量,则在上面规范前加 “m_“; 4.全局变量,则在上面规范前加 “g_“; 5.在类型前加了“const“,命名约定不变; VC 中一些控件中一些控件变量变量的的前缀前缀缩缩写写: ComboBox cmb Edit edt Dialog dlg ListBox lst Picture pic Animate ani 二二、变量定义规则变量定义规则 1.MFC 类 CWnd* p.Wnd 省去的地方一般为该类的用途 (如果是某一个类的成员,则还应该在前加 “m_“)又如:CView* p.View 2.局部变量应尽量易懂简洁, 使用常见的变量, 如 Num, nCount, i, j, k, n, len, pos, offset, nReadNum, index, nRet, ret, string, filename 临时变量,如 ltmp, ftmp,tmpStr,tempStr 3.函数命名也应该见名知意。如 CalcAllDataStyle(),ReadDocDataFromTime(),GetIndexInfo() 常见的函数 Init_, Open_, Create_, Get_, Set_, Read_, Load_, Write_, Start_, Stop_, Check_, Test_, Fill_, Process_, Sort_, Do_, Select_, Is_, Exist_,_Ex 4.只对常用变量名和长变量名进行缩写 如果需要对变量名进行缩写时,一定要注意整个代码中缩写规则的一致性。例如,如果在代码 的某些区域中使用 Cnt,而在另一些区域中又使用 Count,就会给代码增加不必要的复杂性。 5. 禁止使用汉语拼音来命名; 6.在代码中尽量不用具体的大小数值,定义成常量,便于以后维护,如: Const int MAX_DOWNLOADNUM=20 struct DownInfo m_DownInfoMAX_DOWNLOADNUM; 7.定义有焦点的变量 用于多个目的的变量称为无焦点(多焦点)的变量。无焦点变量所代表的意义与程序的执行 流程有关,当程序处于不同位置时,它所表示的意义是不固定的,这样就给程序的可读性和可维护 性带来了麻烦。 如: Int iCount; iCount=GetStudentCount(); iCount=GetTeacherCount(); 8.使用肯定形式的布尔变量 给布尔变量命名时,始终都要使用变量的肯定形式,以减少其它开发人员在理解布尔变量所代 表的意义时的难度。 如: bool bSuccess; bool bFail ; 9.尽量缩小变量的作用域 如果变量的作用域大于它应有的范围,变量可继续存在,并且在不再需要该变量后的很长时间 内仍然占用资源。 如:全局变量要尽量少用。 三三、代码的格式化代码的格式化 1.常使用 Ctrl+F8 对编写的代码进行格式化; 2.一行代码不能太长 代码行最大长度宜控制在 70 至 80 个字符以内。代码行不要过长,否则眼睛看不过来,也不 便于打印。长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符) 。 拆分出的新行要进行适当的缩进,使排版整齐,语句可读。 If (very_longer_variable1 = very_longer_variable12) 3. 修饰符的位置 修饰符 * 和 应该靠近数据类型还是该靠近变量名,是个有争议的活题。若将修饰符 * 靠 近数据类型,例如:int* x; 从语义上讲此写法比较直观,即 x 是 int 类型的指针。 上述写法的弊端是容易引起误解,例如:int* x, y; 此处 y 容易被误解为指针变量。虽然将 x 和 y 分行定义可以避免误解,但并不是人人都愿意这样做。 所以应当将修饰符 * 和 紧靠变量名 例如: char *name; int *x, y; / 此处 y 不会被误解为指针 4. 代码行 一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代码容易阅读,并且方 便于写注释。if、for、while、do 等语句自占一行,执行语句不得紧跟其后。不论执行语句有多 少都要加。这样可以防止书写失误。 5. 空行 空行起着分隔程序段落的作用。空行得体(不过多也不过少)将使程序的布局更加清晰。空行 不会浪费内存, 虽然打印含有空行的程序是会多消耗一些纸张, 但是值得。 所以不要舍不得用空行。 在每个类声明之后、每个函数定义结束之后都要加空行。参见示例 2-1(a) 在一个函数体内, 逻揖上密切相关的语句之间不加空行, 其它地方应加空行分隔。 参见示例 2-1 (b ) 四四、代码的注释代码的注释 1.用注释来说明何时可能出错和为什么出错。 2.在要注释的代码前书写注释。 注释一定出现在要注释的程序段前,不要在某段程序后书写对这段程序的注释,先看到 注释对程序的理解会有一定帮助。 3.使用/来指明注释。 4.为每个过程赋予一个注释标头。 每个过程都应有一个注释标头。过程的注释标头可包含多个文字项,比如输入参数、返 回值、原始作者、最后编辑该过程的程序员、上次修改日期、版权信息 5.注释与代码要保持一致。 6.请在每个 If 语句的前面加上注释。 7.在每个 Case 语句的前面加上注释。与 If 语句一样,Switch Case 语句用于评估对程序 执行产生影响的表达式。 8.在每个循环(包括 For 循环和 Do While 循环)的前面加上注释。每个循环都有它的作用, 许多情况下这个作用不清楚直观。 9.在修改了全局变量的每个语句前面加上注释。全局变量很讨厌。但如果非常需要使用全局变 量,请说明你为何要修改它。这将使代码的调试容易一些。 (1)文件头注释文件头注释 每一个源程序文件都要在文件头写注释,文件头注释包括下列域: 文件名(FileName); 描述(Description),描述文件的内容和作用 开发历史(History) 日期(Date); 理由(Reason) ,可能值有创建,更新等; 签名(Signature); 外部过程(Export Proc) 格式如下: /* * 文件名: * * * * 描述: * * * * 历史:*日期* *理由* *签名* * * * * * * 外部过程:1、 * * 2、 * */ (2)类注释类注释 每一个类都要在定义类的前面写注释,类注释包括下列域: 类名(ClassName) ; 描述(Description),描述类的内容和作用; 使用方法(Use Method) ,描述如何创建一个类的实例; 开发历史(History) 日期(Date) ; 理由(Reason) ,可能值有创建,更新等; 签名(Signature) ; 外部类(Export Class) 。 格式如下: /* * 类名: * * * * 描述: * * * * 使用方法: * * * * 历史:*日期* *理由* *签名* * * * * * * 外部类:1、 * * 2、 * */ (3)函数或过程头注释函数或过程头注释 函数或过程头注释包括下列域: 名字(Name); 描述(Description) :描述函数或过程的功能; 开发历史: (History): 日期(Date); 理由(Reason) ,可能值有创建,更新等; 签名(Signature); 参数(Parameter); 返回值(Return); 注(Note) 格式如下: /* * 名