《软件编程规范总结.docx》由会员分享,可在线阅读,更多相关《软件编程规范总结.docx(16页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、软件编程规范总结 软件编程规范总结 本规范的内容包括:基本原则、布局、注释、命名规则、变量常量与类型、表达式与语句、函数与过程、牢靠性、可测性、断言与错误处理等。 一、基本原则 1.2.3.4.5.6.7. 保持代码的简明清楚,避开过分的编程技巧。 全部的代码尽量遵循ANSI C标准。 编程时首先达到正确性,其次考虑效率。 避开或少用全局变量。 尽量避开运用GOTO语句。 尽可能重用、修正老的代码。 尽量削减同样的错误出现的次数。 二、文件布局 1.头文件必需要避开重复包含。 2.包含标准库头文件用尖括号 ,包含非标准库头文件用双引号 “”。 3.遵循统一的依次书写类的定义及实现。 类的定义(
2、在定义文件中)按如下依次书写: 公有属性 公有函数 爱护属性 爱护函数 私有属性 私有函数 类的实现(在实现文件中)按如下依次书写: 构造函数 析构函数 公有函数 爱护函数 私有函数 4.程序中一行的代码和注释不能超过80列。 5.定义指针类型的变量,*应放在变量前。 6.源程序中关系较为紧密的代码应尽可能相邻。 iLength iWidth = 10; = 5; / 矩形的长与宽关系较亲密,放在一起。 StrCaption = “Test”; 7.禁止运用TAB键,必需运用空格进行缩进。缩进为4个空格。 8.程序的分界符和应独占一行并且位于同一列,同时与引用它们的语句左对齐。 之内的代码块运
3、用缩进规则对齐。 9.if、else、else if、for、while、do等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加 。 if (varible1 varible1 = varible2; 10. 11.声明类的时候,public、protected、private关键字与分界符 对齐,这些部分的内容要进行缩进。 12.结构型的数组、多维的数组假如在定义时初始化,根据数组的矩阵结构分行书写。 13.相关的赋值语句等号对齐。 14.在switch语句中,每一个case分支和default要用 括起来, 中的内容须要缩进。 15.不同逻辑程序块之间要运用空行分隔。 16.一
4、元操作符如“!”、“”、“+”、“-”、“*”、“&”(地址运算符)等前后不加空格。“”、“.”、“-”这类操作符前后不加空格。 17.多元运算符和它们的操作数之间至少须要一个空格。 18.关键字之后要留空格。(if、for、while等关键字之后应留一个空格再跟左括号(,以突出关键字。) 19.函数名之后不要留空格。(函数名后紧跟左括号(,以与关键字区分。) 20.(向后紧跟,)、,、;向前紧跟,紧跟处不留空格。,之后要留空格。;不是行结束符号时其后要留空格。 21.长表达式(超过80列)要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排
5、版整齐。 22.函数声明时,类型与名称不允许分行书写。 三、注释 1.一般状况下,源程序有效注释量必需在20以上。 2.注释符与注释内容之间要用一个空格进行分隔。 3.文件头部必需进行注释,包括:.h文件、.c文件、.cpp文件、.inc文件、.def文件、编译说明文件.cfg等。 4.函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、访问和修改的表、修改信息等。 5.包含在 中代码块的结束处应加注释,便于阅读。特殊是多分支、多重嵌套的条件语句或循环语句。 void Main() if () while () /* end of while () */ /* end of
6、 if () */ / 指明是哪条语句结束 /* end of void main()*/ / 指明函数的结束 / 指明该条while语句结束 6.保证代码和注释的一样性。修改代码同时修改相应的注释,不再有用的注释要删除。 7.注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不行放在下面,如放于上方则需与其上面的代码用空行隔开。 8.全局变量要有具体的注释,包括对其功能、取值范围、访问信息及访问时留意事项等的说明。 9.注释与所描述内容进行同样的缩排。 10.对分支语句(条件分支、循环语句等)必需编写注释。 11.尽量避开在注释中运用缩写,特殊是不常用缩写
7、。 四、命名规则 1.标识符要采纳英文单词或其组合,便于记忆和阅读,切忌运用汉语拼音来命名。 严格禁止运用连续的下划线,下划线也不能出现在标识符头或结尾(预编译开关除外)。 2.程序中不要出现仅靠大小写区分的相像的标识符。 3.用正确的反义词组命名具有互斥意义的变量或相反动作的函数等。 4.宏、常量名都要运用大写字母, 用下划线 _分割单词。预编译开关的定义运用下划线 _起先。 5.变量名长度应小于31个字符,以保持与ANSI C标准一样。不得取单个字符(如i、j、k等)作为变量名,但是局部循环变量除外。 6.程序中局部变量不要与全局变量重名。 7.运用一样的前缀来区分变量的作用域。 g_ :
8、全局变量 s_ :模块内静态变量 空:局部变量不加范围前缀 8.运用一样的小写类型指示符作为前缀来区分变量的类型。 说明:常用变量类型前缀列表如下: i : int f : float d : double c : char uc : unsigned char 或 BYTE l : long p : pointer b : BOOL h : HANDLE w : unsigned short 或 WORD dw : DWORD或 unsigned long a :数组,array of TYPE str :字符串 t :结构类型 9.完整的变量名应由前缀+变量名主体组成,变量名的主体应当运用
9、“名词”或者“形容词名词”,且首字母必需大写。 float g_fValue; 10.函数名用大写字母开头的单词组合而成,且应当运用“动词”或者“动词名词”(动宾词组)。 11.结构名、联合名、枚举名由前缀T_ 开头。事务名由前缀EV_ 开头。 12.标识符前最好不加项目、产品、部门的标识。 五、变量常量与类型 1.定义全局变量时必需细致分析,明确其含义、作用、取值范围及与其它全局变量间的关系。 2.明确全局变量与操作此全局变量的函数或过程的关系。 3.一个变量有且只有一个功能,不能把一个变量用作多种用途。 4.循环语句与推断语句中,不允许对其它变量进行计算与赋值。 5.宏定义中假如包含表达式
10、或变量,表达式和变量必需用小括号括起来。 6.运用宏定义多行语句时, 必需运用 把这些语句括起来。 建议: l 尽量构造仅有一个模块或函数可以修改、创建的全局变量,而其余有关模块或函数只能访问。 l 对于全局变量通过统一的函数访问。 l 尽量运用const说明常量数据,对于宏定义的常数,必需指出其类型。 l 最好不要在语句块内声明局部变量。 7.结构和联合必需被类型化。 typedef struct char acNameNAME_SIZE; WORD wScore; T_Student; T_Student *ptStudent; 建议: l 运用严格形式定义的、可移植的数据类型,尽量不要运
11、用与详细硬件或软件环境关系亲密的变量。 l 结构是针对一种事务的抽象,功能要单一,不要设计四平八稳的数据结构。 l 不同结构间的关系要尽量简洁,若两个结构间关系较困难、亲密,那么应合为一个结构。 l 结构中元素的个数应适中。若结构中元素个数过多可考虑依据某种原则把元素组成不同的子结构,以削减原结构中元素的个数。 l 细致设计结构中元素的布局与排列依次,使结构简单理解、节约占用空间,并削减引起误用现象,对于结构中未用的位明确地赐予保留。 l 结构的设计要尽量考虑向前兼容和以后的版本升级,并为某些将来可能的应用保留余地(如预留一些空间等)。 l 合理地设计数据并运用自定义数据类型,尽量削减没有必要
12、的数据类型默认转换与强制转换。 l 当声明数据结构时,必需考虑机器的字节依次、运用的位域及字节对齐等问题 。 六、表达式与语句 1.在表达式中运用括号,使表达式的运算依次更清楚。 if (iYear % 4 = 0) & (iYear % 100 != 0) | (iYear % 400 = 0) 2.避开表达式中的附加功能,不要编写太困难的复合表达式。 3.不行将浮点变量用“=”或“!=”与任何数字比较。 4.应当将指针变量用“=”或“!=”与NULL比较。 5.在switch语句中,每一个case分支必需运用break结尾,最终一个分支必需是default分支。 6.不行在for 循环体内
13、修改循环变量,防止for 循环失去限制。 建议: l 循环嵌套次数不大于3次。 l do while语句和while语句仅运用一个条件。 l 当switch语句的分支比较多时,采纳数据驱动方式。 假如循环体内存在逻辑推断,并且循环次数很大,宜将逻辑推断移到循环体的外面。 l for语句的循环限制变量的取值采纳“半开半闭区间”写法。 l 在进行“=”比较时,将常量或常数放在“=”号的左边。 七、参数 1.假如函数没有参数,则用void填充。 void SetValue(int iWidth, int iHeight); float GetValue(void); 2.假如参数是指针,且仅作输入用
14、,则应在类型前加const。(防止该指针在函数体内被意外修改。) 3.当结构变量作为参数时,应传送结构的指针而不传送整个结构体,并且不得修改结构中的元素,用作输出时除外。 4.不要省略返回值的类型,假如函数没有返回值,那么应声明为void类型。 5.对于有返回值的函数,每一个分支都必需有返回值。(为了保证对被调用函数返回值的推断,有返回值的函数中的每一个退出点都须要有返回值) 6.对输入参数的正确性和有效性进行检查。 7.防止将函数的参数作为工作变量。 void SumData(int iNum, int *piData, int *piSum ) int iCount ; int iSumT
15、mp; / 存储“和”的临时变量 iSumTmp = 0; for (iCount = 0; iCount iSumTmp += piDataiCount; *piSum = iSumTmp; 反例: void SumData(int iNum, int *piData, int *piSum ) int iCount; *piSum = 0; for (iCount = 0; iCount *piSum += piDataiCount; / piSum成了工作变量,不好。 8.必需对所调用函数的错误返回值进行处理。(函数返回错误,往往是因为输入的参数不合法,或者此时系统已经出现了异样。假如不
16、对错误返回值进行必要的处理,会导致错误的扩大,甚至导致系统的崩溃。) 八、牢靠性 1.在程序编制之前,必需了解编译系统的内存安排方式,特殊是编译系统对不同类型的变量的内存安排规则,如局部变量在何处安排、静态变量在何处安排等。 2.防止内存操作越界。 3.必需对动态申请的内存做有效性检查,并进行初始化;动态内存的释放必需和安排成对以防止内存泄漏,释放后内存指针置为NULL。 4.变量在运用前应初始化,防止未经初始化的变量被引用。 5.指针类型变量必需初始化为NULL。 6.指针不要进行困难的逻辑或算术操作。 7.假如指针类型明确不会变更,应当强制为const类型的指针,以加强编译器的检查。 8.
17、削减指针和数据类型的强制类型转化。 9.移位操作肯定要确定类型。 10.对变量进行赋值时,必需对其值进行合法性检查,防止越界等现象发生。 11.类中的属性应声明为private,用公有的函数访问。 12.在编写派生类的赋值函数时,留意不要遗忘对基类的成员变量重新赋值。 13.构造函数应完成简洁有效的功能,不应完成困难的运算和大量的内存管理。 14.不要在栈中安排类的实例,也不要生成全局类实例。 15.正确处理拷贝构造函数与赋值函数。 16.过程/函数中申请的(为打开文件而运用的)文件句柄,在过程/函数退出之前要关闭,除非要把这个句柄传递给其它函数运用。 九、可测试性 1.在同一项目组或产品组内
18、,为打算集成测试和系统联调,要有一套统一的调测开关及相应信息输出函数,并且要有具体的说明。统一的调试接口和输出函数由模块设计和测试人员依据项目特性统一制订,由项目系统人员统一纳入系统设计中。 2.在同一个项目组或产品组内,调测打印出的信息串要有统一的格式。信息串中应当包含所在的模块名(或源文件名)及行号等信息。 3.在编写代码之前,应预先设计好程序调试与测试的方法和手段,并设计好各种调测开关及相应测试代码(如打印函数等)。 十、断言与错误处理 1.整个软件系统应当采纳统一的断言。假如系统不供应断言,则应当自己构造一个统一的断言供编程时运用。 2.运用断言捕获不应当发生的非法状况。不要混淆非法状
19、况与错误状况之间的区分,后者是必定存在的并且是肯定要作出处理的。 3.指向指针的指针及更多级的指针必需逐级检查。 4.对较困难的断言加上明确的注释。 5.用断言保证没有定义的特性或功能不被运用。 6.用调测开关来切换软件的DEBUG版和RELEASE版,而不要同时存在RELEASE版本和DEBUG版本的不同源文件,以削减维护的难度。 7.正式软件产品中应把断言及其它调测代码去掉(即把有关的调测开关关掉)。 8.在软件系统中设置与取消有关测试手段,不能对软件实现的功能等产生影响。 9.用断言来检查程序正常运行时不应发生但在调测时有可能发生的非法状况。 软件编程规范总结 软件编程实习总结_工作总结 软件编程书籍清单 软件编程测试部工作总结 软件编程问题与错误的总结 软件编程学习心得 软件编程学生毕业感言 PLC编程资料、PLC编程软件、机械、电子图书 软件编程暑期实训心得 12级软件编程班家长会总结 本文来源:网络收集与整理,如有侵权,请联系作者删除,谢谢!第16页 共16页第 16 页 共 16 页第 16 页 共 16 页第 16 页 共 16 页第 16 页 共 16 页第 16 页 共 16 页第 16 页 共 16 页第 16 页 共 16 页第 16 页 共 16 页第 16 页 共 16 页第 16 页 共 16 页
限制150内