软件设计规范标准_第1页
软件设计规范标准_第2页
软件设计规范标准_第3页
软件设计规范标准_第4页
软件设计规范标准_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

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

文档简介

业精于勤荒于嬉,行成于思毁于随!精品文档,欢迎你阅读并下载!软件设计规范标准软件设计规范制定:审核:批准:文件编号生效日期版本号分发部门序号版本修订履历修订内容修订人修订日期会签与文件发放:会签部门会签人会签日期签收部门签收人签收日期深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心目录第一章、项目模块划分....................................................16一、模块划分.............................................................16二、模块命名.............................................................16第二章、文件格式........................................................16一、c文件格式说明:....................................................161、文件创建及修改说明区.................................................162、头文件引用区.........................................................173、全局变量定义区.......................................................174、驱动函数区............................................................175、应用函数区............................................................186、文件结束说明.........................................................18二、h文件格式说明.......................................................181、文件创建及修改说明区.................................................182、防重调用定义.........................................................193、头文件引用............................................................194、控制接口定义区.......................................................195、常量定义区............................................................206、宏调用定义区.........................................................207、类型定义区............................................................208、外部引用变量区.......................................................209、外部引用函数区.......................................................2110、操作流程说明区......................................................2111、文件结束说明........................................................21第三章、命名规则........................................................22一、函数命名规则........................................................22深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心二、变量命名规则........................................................22三、宏命名规则..........................................................23四、文件命名规则........................................................23五、新定义变量类型命名规则.............................................23六、命名注意事项:......................................................231、标识符命名基本原则...................................................232、命名中若使用特殊约定或缩写,则要有注释说明.........................243、局部循环变量也必须按照变量命名规则来定义...........................244、不要用数字或较奇怪的字符来定义标识符...............................245、用正确的反义词组命名具有互斥意义的变量或相反动作的函数等..........246、避免使用以下划线开始和结尾的定义....................................247、程序中不要出现仅靠大小写区分的相似的标识符.........................248、标识符缩写............................................................259、函数名应准确描述函数的功能..........................................2510、避免使用无意义或含义不清的动词为函数命名..........................25第四章、代码书写规范....................................................25一、基本原则.............................................................25二、排版.................................................................251、缩进风格..............................................................252、不要使用【TAB】键....................................................253、空行..................................................................254、语句长度要小于80个字符.............................................265、长语句换行............................................................266、长表达式换行.........................................................277、若函数的参数较长,则要进行适当的划分...............................278、一行只写一条语句.....................................................279、括号{}................................................................2810、语句缩进要求........................................................28深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心11、分界符...............................................................2912、空格.................................................................30三、注释.................................................................311、注释量................................................................312、函数头部注释.........................................................313、代码与注释同时修改...................................................314、注释的内容要清楚、明了,含义准确,防止注释二义性..................325、避免在注释中使用缩写,特别是非常用缩写.............................326、注释书写位置.........................................................327、变量、常量命名不能充分自注释的,必须加以注释.......................328、数据结构命名不能充分自注释的,必须加以注释.........................339、全局变量注释.........................................................3310、注释要与说描述的内容进行同样的缩排................................3311、将注释与其上面的代码用空行隔开.....................................3412、连续case语句处理时,必须编写注释.................................3513、代码或表达式的中间禁止插入注释.....................................3614、通过正确命名使代码成为自注释的.....................................3715、在代码的功能、意图层次上进行注释,提供有用、额外的信息...........3716、在程序块的结束行右方加注释标记,以表明某程序块的结束.............3717、注释格式.............................................................3718、采用中文注释........................................................3819、使用#if0和#endif注释代码块......................................3820、注释不能嵌套........................................................38四、代码可读性..........................................................381、使用小括号明确表达式的操作顺序......................................382、用有意义的枚举和宏替代数字..........................................393、源程序中关系较为紧密的代码应尽可能相邻.............................394、用多行简单语句替代复杂语句..........................................40深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心五、变量,结构..........................................................401、公共变量..............................................................401.1、去掉没必要的公共变量..............................................401.2、仔细定义并明确公共变量的含义、作用、取值范围及公共变量间的关系.401.3、明确公共变量与操作此公共变量的函数或过程的关系..................401.4、要谨慎向公共变量传递数据..........................................411.5、防止局部变量与公共变量同名。......................................411.6、公共变量仅由模块或函数创建和修改,其余模块和函数只能访问.......412、局部变量..............................................................412.1、严禁使用未经初始化的变量作为右值.................................412.2、不使用与硬件或软件环境关系密切的变量.............................412.3、变量声明时,同一类型,不同意义的多个变量,要分行,便于区分.....412.4、对只设置一次的变量,宜使用“const”限定词进行声明...............422.5、避免在函数中使用static局部变量.................................423、数组..................................................................423.1、数组大小及初始值要明确定义........................................423.2、数组、结构和联合的初始化列表应显式描述...........................424、结构、联合............................................................424.1、结构的功能要单一,是针对一种事务的抽象...........................424.2、不要设计面面俱到、非常灵活的数据结构.............................434.3、不同结构间的关系不要过于复杂......................................434.4、结构中元素的个数应适中............................................444.5、结构体中元素的布局.................................................454.6、结构体设计要考虑兼容性............................................464.7、跨平台数据结构,要考虑字节顺序及对齐问题.........................464.8、struct或union类型中至少应有一个成员.............................474.9、struct或union类型的成员类型.....................................475、枚举..................................................................47深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心5.1、枚举元素的初始化应完整............................................476、自定义数据类型.......................................................476.1、合理地设计数据并使用自定义数据类型...............................476.2、自定义数据类型命名要恰当..........................................477、类型转换..............................................................487.1、谨慎使用数据类型的强制转换........................................487.2、了解编译系统默认的数据类型转换....................................487.3、应禁止signed类型与unsigned类型之间的隐式转化................487.4、应禁止int类型与float类型的隐式转化...........................488、指针..................................................................488.1、不应对指针变量使用强制类型转换赋值...............................488.2、不应把自动类型的局部变量的地址赋值给外部指针....................488.3、指针的指针不应超过两级............................................498.4、指向不同数据类型的指针之间不应相互转换...........................498.5、指针转换过程中不应丢失指针的const、volatile属性...............498.6、只有指向数组的指针才允许进行算术运算.............................498.7、只有指向同一数组的两个指针才允许相减.............................498.8、只有指向同一数组的两个指针才允许用>、>=、<和<=等关系运算符进行比较508.9、指针的索引值不应为负..............................................508.10、不应对指针值可能为NULL的指针进行算术运算.......................508.11、调用返回类型为指针的函数后,应进行是否为空的判断...............508.12、局部变量的地址不应在本对象消亡后传给另外一个对象...............508.13、一个未知大小的对象的指针不应成为加法或者减法操作的左操作数....51六、函数.................................................................511、函数编写原则.........................................................511.1、明确函数功能,精确(而不是近似)地实现函数设计..................511.2、函数的规模尽量限制在200行以内....................................511.3、一个函数仅完成一件功能............................................52深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心1.4、为简单功能编写函数.................................................521.5、不要设计多用途面面俱到的函数......................................521.6、函数功能具有可预测性..............................................521.7、函数功能具有独立性.................................................531.8、防止函数出现随机内聚..............................................531.9、功能不明确的较小函数,可以不必存在...............................541.10、设计高扇入、合理扇出(小于7)的函数.............................551.11、减少函数本身或函数间的递归调用...................................551.12、降低函数间的耦合度................................................552、函数参数..............................................................552.1、明确接口函数参数的合法性检查者....................................552.2、防止将函数的参数作为工作变量......................................562.3、避免设计多参数函数,不使用的参数从接口中去掉....................562.4、非调度函数应减少或防止控制参数,尽量只使用数据参数..............572.5、检查函数所有参数输入的有效性......................................572.6、检查函数所有非参数输入的有效性,如数据文件、公共变量等..........572.7、调用函数时参数类型要一致..........................................582.8、避免使用BOOL参数..................................................582.9、在函数参数中不应使用static存储类标识符..........................582.10、函数参数数量......................................................582.11、宜避免函数参数在调用中未被使用...................................583、函数返回..............................................................583.1、对所调用函数的错误返回码要仔细、全面地处理.......................583.2、函数的返回值要清楚、明了,让使用者不容易忽视错误情况............583.3、函数返回值要与赋值变量类型一致....................................583.4、对于提供了返回值的函数,在引用时最好使用其返回值................583.5、函数只有一个出口...................................................584、可重入函数............................................................58深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心4.1、可重入函数使用局部变量............................................584.2、可重入函数使用全局变量............................................595、函数模块划分.........................................................605.1、仔细分析模块的功能,进行函数的划分和组织.........................605.2、如果多段代码重复做同一件事情,那么在函数的划分上可能存在问题...605.3、函数内部的代码结构顺序............................................606、循环语句..............................................................616.1、循环控制变量的类型应为整型........................................616.2、循环控制变量应为局部变量..........................................616.3、for循环控制语句中的3个表达式只应和循环控制相关................616.4、for循环不宜只执行一次.............................................617、判断语句..............................................................627.1、不要轻易用条件分支去替换逻辑表达式...............................627.2、switch语句中不应只包含default语句...............................627.3、所有非空的switchcase子句都应以break语句结束..................627.4、switch控制表达式不应是一个常量或逻辑表达式......................627.5、每一个switch语句都应至少有一个case子句.........................627.6、case表达式的类型应与switch控制表达式的类型一致.................627.7、case表达式的大小不应超过switch控制表达式的大小.................628、赋值语句..............................................................628.1、尽量不使用条件赋值语句............................................629、其他注意事项.........................................................629.1、避免函数中不必要语句,防止程序中的垃圾代码.......................629.2、在多任务操作系统的环境下编程,更要注意函数可重入性的构造.......629.3、将常用较长变量用宏替代............................................62七、预处理...............................................................631、宏....................................................................631.1、用宏定义表达式时,要使用完备的括号...............................63深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心1.2、将宏所定义的多条表达式放在大括号中...............................631.3、使用宏时,不允许参数发生变化......................................641.4、函数类宏调用时参数要完整..........................................642、条件编译..............................................................642.1、预处理语句“#if”和“#endif”不应分散在不同的文件之中...........642.2、被包含文件中的“#else”、“#elseif”、“#endif”不应与父文件中的“#if”匹配.......................................................................642.3、“#if”表达式中使用的宏应该已经被定义,并且“#if”表达式只能包含整型常量642.4、宏如果需要被重定义,应该先用“#undef”解除前面的定义............65八、中断.................................................................651、中断服务程序不应有返回值............................................652、中断服务程序中不应使用printf()函数.................................653、对于中断中使用到的非局部变量,在中断处理函数中应对其进行入栈保护.654、调用中断处理程序中的变量要进行开关中断处理.........................655、对于开关中断,要注意成对匹配........................................656、中断服务程序代码要简单化............................................65九、程序可测性..........................................................651、原则..................................................................651.1、统一的调测开关及打印函数..........................................651.2、统一的打印信息串格式..............................................651.3、正式软件产品中应把断言及其它调测代码去掉(即把有关的调测开关关掉)651.4、用调测开关切换软件的DEBUG版和正式版.............................651.5、软件DEBUG版和发行版在实现功能上具有一致性.......................661.6、构造测试环境和测试用例............................................661.7、预先设计程序调测的方法和手段及各种调测开关.......................661.8、调测开关应分为不同级别和类型......................................662、断言..................................................................662.1、使用断言来发现软件问题,提高代码可测性...........................66深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心2.2、用断言来检查程序正常运行时不应发生但在调测时有可能发生的非法情况672.3、不能用断言来检查最终产品肯定会出现且必须处理的错误情况..........672.4、对较复杂的断言加上明确的注释......................................672.5、用断言确认函数的参数..............................................672.6、用断言保证没有定义的特性或功能不被使用...........................672.7、用断言对程序开发环境(OS/Compiler/Hardware)的假设进行检查.....682.8、编写防错程序,然后在处理错误之后可用断言宣布发生错误............68十、程序效率.............................................................691、原则..................................................................691.1、编程时要经常注意代码的效率........................................691.2、提高代码效率的前提.................................................701.3、局部效率应为全局效率服务..........................................701.4、合理划分模块函数...................................................701.5、不应花过多的时间拼命地提高调用不很频繁的函数代码效率............701.6、不要一味追求紧凑的代码............................................701.7、不应存在执行不到的代码............................................701.8、去掉没必要的全局变量..............................................702、方法..................................................................702.1、解决软件空间效率1.................................................702.2、解决软件空间效率2.................................................712.3、循环体内工作量最小化..............................................712.4、仔细分析有关算法,并进行优化......................................722.5、仔细考查、分析系统及模块处理输入(如事务、消息等)的方式,并加以改进722.6、直接用汇编编写调用频繁或性能要求极高的函数.......................722.7、在多重循环中,应将最忙的循环放在最内层...........................722.8、尽量减少循环嵌套层次..............................................732.9、尽量不在循环体内放置判断语句......................................732.10、尽量用乘法或其它方法代替除法,特别是浮点运算中的除法...........74深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心2.11、应注意switch-case语句的使用.....................................74十一、程序质量..........................................................751、原则..................................................................751.1、代码质量保证优先原则..............................................751.2、合理划分子模块,提高可移植性和可重用性...........................751.3、提供良好的接口界面.................................................751.4、系统具有一定容错能力..............................................752、方法..................................................................752.1、认真处理程序所能遇到的各种出错情况...............................752.2、系统运行之初,要初始化有关变量及运行环境,防止未经初始化的变量被引用752.3、系统运行之初,要对加载到系统中的数据进行一致性检查..............752.4、严禁随意更改其它模块或系统的有关设置和配置.......................752.5、不能随意改变与其它模块的接口......................................752.6、防止内存操作越界...................................................762.7、编程时,要防止差1错误............................................762.8、要时刻注意易混淆的操作符..........................................762.9、条件判断语句必须处理所有情况......................................772.10、不要用goto语句...................................................772.11、尽量都采用标准语句和标准库函数...................................772.12、避免使用嵌入式汇编................................................772.13、精心构造算法,并对其性能、效率进行测试..........................772.14、对较关键的算法最好使用其它算法来确认............................772.15、时刻注意表达式是否会上溢、下溢...................................772.16、使用变量时要注意其边界值的情况...................................782.17、注意程序代码是否超过系统有关限制................................782.18、循环、分支层次不要超过五层.......................................782.19、不要比较浮点数的相等.............................................782.20、关注共用体的存储、对齐模式.......................................78深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心2.21、头文件中不应有对象或函数的定义...................................782.22、不应单独使用小写字母“l”或大写字母“O”作为变量名.............782.23、函数声明时参数不应只有类型名没有标识符..........................782.24、不应对有符号数进行位运算.........................................792.25、无格式的字符型不应与负数常量和零比较............................792.26、无符号值不应与负数常量比较.......................................792.27、对变量进行移位操作应保证不会产生溢出和数据截短.................792.28、不应在布尔表达式中使用赋值操作符................................792.29、不应对布尔表达式进行算术或者位运算..............................792.30、表达式的值在任何求值顺序下应保持一致............................792.31、应避免除数可能为10的情况出现.....................................792.32、赋值运算符的左操作数不应进行转换操作,并且应该是一个可更改的对象792.33、sizeof操作符不应用在有单边作用的表达式上.......................802.34、留心具体语言及编译器处理不同数据类型的原则及有关细节...........80十二、代码代码编辑、编译、审查.........................................801、打开编译器的所有告警开关对程序进行编译.............................802、在产品软件(项目组)中,要统一编译开关选项.........................803、通过代码走读及审查方式对代码进行检查...............................804、测试部测试产品之前,应对代码进行抽查及评审.........................805、养成随时保存编写代码的习惯..........................................806、同产品软件(项目组)内,最好使用相同的编辑器,并使用相同的设置选项817、要小心地使用编辑器提供的块拷贝功能编程.............................818、合理地设计软件系统目录,方便开发人员使用...........................81附录A常用数据类型及简写..............................................81附录B常用单词及缩写...................................................82附录C常见反义词组......................................................84附录D常见命名规则......................................................86一、匈牙利命名法........................................................86深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心二、骆驼(Camel)命名法.................................................86三、帕斯卡(Pascal)命名法.............................................86四、下划线命名法........................................................86深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心第一章、项目模块划分一、模块划分将整个项目按照功能进行模块划分,各个模块相互独立,每个模块由一系列c文件和h文件组成。简单功能的模块采用一个c文件和h文件接口,复杂功能的模块可能需要多个c文件和h文件。二、模块命名按照模块所实现功能的英文名称或者简写命名,全部采用小写字母,多于1个单词的中间加下划线。例如:模块命名说明液晶lcd.clcd.h液晶初始化,字符、汉字和图片显示lcd_fonts.clcd_fonts.h液晶自定义字库按键key.ckey.h按键初始化,键值列表,取按键值led.c指示灯led.h指示灯初始化,闪烁控制ledseg.c数码管ledseg.h数码管初始化,数字显示,特殊字符显示beep.c蜂鸣器beep.h蜂鸣器初始化,鸣叫控制一、c文件格式说明:1、文件创建及修改说明区第二章、文件格式深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心主要包含:公司信息:公司名称、公司网站。创建信息:创建者名称,创建日期,最初版本号,文档内容描述。修改信息:修改者名称,修改日期,修改后版本号,修改内容描述。可参考模块《template.c》说明:与硬件相关的文件可以在此增加说明,如芯片型号等。2、头文件引用区主要包含:系统头文件引用:文件名包含在尖括号中。自定义头文件引用:文件名包含着双引号中。可参考模块《template.c》3、全局变量定义区主要包含:全局变量定义区说明注释行:全局变量定义:要赋初值。全局变量注释:可参考模块《template.c》。4、驱动函数区深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心主要包含:驱动函数区说明注释行:函数说明:包含函数说明,参数说明,返回值说明。函数体:可参考模块《template.c》5、应用函数区主要包含:应用函数区说明注释行:函数说明:包含函数功能说明,参数说明,返回值说明。函数体:可参考模块《template.c》6、文件结束说明主要包含:文件结束说明:EndOfFile可参考模块《template.c》二、h文件格式说明1、文件创建及修改说明区深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心主要包含:公司信息:公司名称、公司网站。创建信息:创建者名称,创建日期,最初版本号,文档内容描述。修改信息:修改者名称,修改日期,修改后版本号,修改内容描述。可参考模块《template.h》2、防重调用定义命名规则:下划线+文件名大写+下划线+文件类型H+下划线可参考模块《template.h》3、头文件引用主要包含:系统头文件引用:文件名包含在尖括号中。自定义头文件引用:文件名包含着双引号中。可参考模块《template.h》4、控制接口定义区主要包含:控制口线定义区说明注释行:接口定义:全部采用大写字母,单词间以下划线分割注释说明:深圳市德卡科技有限公司生效日期软件设计规范可参考模块《template.h》5、常量定义区主要包含:常量定义区说明注释行:常量定义:全部采用大写字母,单词间以下划线分割注释说明:可参考模块《template.h》6、宏调用定义区主要包含:宏调用定义区说明注释行:宏调用处理:注释说明:可参考模块《template.h》7、类型定义区文件编号文件版本发行类别发行部门A1■新增□修订研发中心主要包含:类型定义区说明注释行:类型定义:注释说明:结构体成员要单独说明。可参考模块《template.h》8、外部引用变量区主要包含:深圳市德卡科技有限公司生效日期软件设计规范外部应用变量区说明注释行:引用变量声明:以extern关键字开始注释说明:可参考模块《template.h》9、外部引用函数区文件编号文件版本发行类别发行部门A1■新增□修订研发中心主要包含:外部应用函数区说明注释行:函数注释说明:包含函数功能说明,参数说明,返回值说明引用函数声明:以extern关键字开始可参考模块《template.h》10、操作流程说明区主要包含:操作流程说明区说明注释行:模块执行流程说明:说明要详细,执行步骤要明确。可参考模块《template.h》11、文件结束说明主要包含:文件结束说明:EndOfFile可参考模块《template.h》深圳市德卡科技有限公司生效日期软件设计规范一、函数命名规则格式如下:第三章、命名规则文件编号文件版本发行类别发行部门A1■新增□修订研发中心序号说明字体选择备注1模块名称大写必选以最直观模式给用户区分不同的模块函数,采用模块英文名称或者简写2下划线必选间隔符3函数动作首字母大写必选动作英文名称或者简写,最多2个单词4函数对象首字母大写可选对象英文名称或者简写,最多2个单词5函数范围首字母大写可选范围英文名称或者简写,最多2个单词例如:LCD_DispWord,表示液晶模块显示汉字函数命名的一个重要原则是望文知意(其他人看到函数名就大体知道函数功能),必须考虑命名的准确性,命名体现函数的功能,而不要体现函数的实现方法。二、变量命名规则局部变量命名:格式如下:序号说明字体选择备注1变量类型简写小写必选以最直观模式给用户区分不同的变量类型,最多2个字母长度,具体参考《附录A常用变量类型及简写》2变量修饰首字母大写可选修饰词英文名称或者简写,最多2个单词3变量名称首字母大写必选名称英文名称或者简写,最多2个单词例如:ucharucCurrentValue;表示无符号类型,当前值数组变量命名时在局部变量类型前增加前缀字母“a”。例如:ucharaucSendBuff[10];指针变量命名时在局部变量类型前增加前缀字母“p”。例如:uchar*pucReceiveBuff[10];全局变量命名时在局部变量类型前增加前缀字母“g”和下划线。静态变量命名时在局部变量类型前增加前缀字母“s”和下划线。深圳市德卡科技有限公司生效日期软件设计规范三、宏命名规则格式如下:文件编号文件版本发行类别发行部门A1■新增□修订研发中心序号说明字体选择备注1模块名称大写必选以最直观模式给用户区分不同的模块宏,采用模块英文名称或者简写2下划线必选间隔符3功能名称大写必选功能英文名称或者简写,最多2个单词4下划线可选间隔符5修饰词大写可选修饰词英文名称或者简写,最多2个单词例如:#defineTMP_BUFF_MAX四、文件命名规则格式如下(全部小写):256//缓冲区最大长度序号说明字体选择备注1模块名称小写必选采用模块英文名称或者简写2下划线可选_3分类名称小写可选分类英文名称或者简写4顿号必选.5文件类型小写必选代码文件(c),头文件(h)例如:液晶模块:lcd_driver.clcd_driver.hlcd_fonts.clcd_fonts.h按键模块:key.ckey.h五、新定义变量类型命名规则新定义变量类型对变量进行命名时可以提出2个与其他类型不相同的字母前缀来表示,并在文件开始或者新类型定义时进行说明。六、命名注意事项:1、标识符命名基本原则标识符的命名要清晰、明了,有明确含义,同时使用完整的单词或大家基本可以理解的缩写,避免使人产生误解。深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心尽量采用英文命名,不可以用汉语拼音。标识符的长度应当符合“min-length&&max-information”原则。说明:较短的单词可通过去掉“元音”形成缩写;较长的单词可取单词的头几个字母形成缩写;一些单词有大家公认的缩写。参考《附录B常用单词及缩写》2、命名中若使用特殊约定或缩写,则要有注释说明说明:应该在源文件的开始之处,对文件中所使用的缩写或约定,特别是特殊的缩写,进行必要的注释说明。3、局部循环变量也必须按照变量命名规则来定义说明:变量,尤其是局部变量,如果用单个字符表示,很容易敲错(如i写成j),而编译时又检查不出来,有可能为了这个小小的错误而花费大量的查错时间。4、不要用数字或较奇怪的字符来定义标识符示例:如下命名,使人产生疑惑。#defineEXAMPLE_0_TEST#defineEXAMPLE_1_TESTvoidTMP_SetSls00(ucharucSls);应改为有意义的单词命名#defineEXAMPLE_UNIT_TEST#defineEXAMPLE_ASSERT_TESTvoidTMP_SetUdtMsgSls(ucharucSls);5、用正确的反义词组命名具有互斥意义的变量或相反动作的函数等说明:可参考《附录C常见反义词组》下面是一些在软件中常用的反义词组。uintuiMinSum;uintuiMaxSum;uintTMP_AddUser(uchar*pucUserName);uintTMP_DeleteUser(uchar*pucUserName);6、避免使用以下划线开始和结尾的定义除了编译开关/头文件等特殊应用,应避免使用_EXAMPLE_TEST_之类以下划线开始和结尾的定义7、程序中不要出现仅靠大小写区分的相似的标识符例如:uintuix,uiX;//变量x与X容易混淆voidTMP_foo(uintuiX);//函数foo与FOO容易混淆深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心voidTMP_FOO(floatfX);8、标识符缩写命名时尽量不使用单词缩写,如果单词太长必须缩写,应该省略其中的元音字母,以便望文知意,如packet_header缩写为pkt_hdr,而不要缩写为pack_h。常用单词缩写见《附录B常用单词及缩写》9、函数名应准确描述函数的功能10、避免使用无意义或含义不清的动词为函数命名说明:避免用含义不清的动词如process、handle等为函数命名,因为这些动词并没有说明要具体做什么。第四章、代码书写规范一、基本原则制定规范的基本目的就是加强代码的可维护性,也就是说代码必须易于阅读,易于理解,易于测试,易于移植。所有的代码必须采用ANSIC,标准函数原型必须采用ANSIC标准。保持代码语句和结构简单清晰,避免使用复杂语句。二、排版1、缩进风格程序块要采用缩进风格编写,缩进的空格数为4个范。stRect.ucLength=0;stRect.ucWidth=0;深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心应如下书写stRect.ucLength=0;stRect.ucWidth=0;9、括号{}if、for、do、while、case、switch、default等语句自占一行,且if、for、do、while等语句的执行语句部分无论多少都要加括号{}。左大括号“{”后和右大括号“}”前不可出现代码,并且与引用他的语句左对齐。示例:如下例子不符合规范。if(pUserCR==NULL)return;应如下书写:if(pUserCR==NULL)return;10、语句缩进要求函数的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格,case语句下的情况处理语句也要遵从语句缩进要求。预处理指令不需要缩进,总是从行首开始。即使预处理指令位于缩进代码块中,指令也应从行首开始示例:良好风格:预处理指令均从行首开始if(lopsided_score)#ifDISASTER_PENDING//Correct--StartsatbeginningoflineDropEverything();#ifNOTIFYNotifyClient();#endif#endifBackToNormal();不良风格:缩进的预处理指令深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心if(lopsided_score)#ifDISASTER_PENDING//Wrong!The"#if"shouldbeatbeginning//oflineDropEverything();#endif//Wrong!Donotindent"#endif"BackToNormal();11、分界符程序块的分界符(如C/C++语言的大括号‘{’和‘}’)应各独占一行并且位于同一列,同时与引用它们的语句左对齐。在函数体的开始、类的定义、结构的定义、枚举的定义以及if、for、do、while、switch、case语句中的程序都要采用如上的缩进方式。示例:如下例子不符合规范。for(...){...//programcode}if(...){...//programcode}voidexample_fun(void){...//programcode}应如下书写。for(...){...//programcode}深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心if(...){...//programcode}voidexample_fun(void){...//programcode}12、空格在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的操作符(一元操作符,成员操作符,数组下标)后不应加空格。说明:采用这种松散方式编写代码的目的是使代码更加清晰。由于留空格所产生的清晰性是相对的,所以,在已经非常清晰的语句中没有必要再留空格,如果语句已足够清晰则括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为在C/C++语言中括号已经是最清晰的标志了。在长语句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部不加空格。给操作符留空格时不要连续留两个以上空格。(1)、关键字之后要留空格,以突出关键字。(2)、函数名之后不要留空格,紧跟左括号‘(’,以与关键字区别(3)、‘(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。(4)、‘,’之后要留空格,例如:Function(x,y,z)。(5)、如果‘;’不是一行的结束符号,其后要留空格例如:for(initialization;condition;update)(6)、赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“=”、“+=”“>=”、“<=”、“+”、“*”、“%”、“&&”、“||”、“<<”,“^”等二元操作符的前后应当加一个空格。if(current_time>=MAX_TIME_VALUE)a=b+c;a*=2;a=b^2;深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心(7)、"!"、"~"、"++"、"--"、"&"(地址运算符)等单目操作符前后不加空格。*p=\'a\';//内容操作"*"与内容之间flag=!isEmpty;//非操作"!"与内容之间p=&mem;//地址操作"&"与内容之间i++;//"++","--"与内容之间(8)、”[]”、"->"、"."前后不加空格。p->id=pid;//"->"指针前后不加空格(9)、指针定义符号*的前面加空格。char*get_string()char*str;(10)、对于表达式比较长的for语句和if语句,为了紧凑起见可以适当地去掉一些空格例如:for(i=0;i<10;i++)和if((a<=b)&&(c<=d))三、注释1、注释量一般情况下,源程序有效注释量必须在20%以上。说明:注释的原则是有助于对程序的阅读理解,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。2、函数头部注释每个函数头部都应该进行注释,包括函数实现的功能,参数说明,返回值等。函数的头部注释要达到调用无需浏览函数,从注释区就能够了解该函数的全部信息。函数功能:该函数实现的具体功能,具有依赖关系的函数间在此进行说明。参数:如果参数值为已知,可以在此详细列表说明。如果函数有调用全局变量,也要在此进行详细说明。返回:函数返回值,对不同的返回值要进行详细说明。3、代码与注释同时修改深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。4、注释的内容要清楚、明了,含义准ocommentsprogramcodetwo应如下书写://codeonecommentsprogramcodeone文件编号文件版本发行类别发行部门A1■新增□修订研发中心深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心//codetwocommentsprogramcodetwo12、连续case语句处理时,必须编写注释对于switch语句下的case语句,如果因为特殊情况需要处理完一个case后进入下一个case处理,必须在该case语句处理完、下一个case语句前加上明确的注释。说明:这样比较清楚程序编写者的意图,有效防止无故遗漏break语句。示例(注意斜体加粗部分):caseCMD_UP:ProcessUp();break;caseCMD_DOWN:ProcessDown();break;caseCMD_FWD:ProcessFwd();if(...){...break;}深圳市德卡科技有限公司生效日期软件设计规范else{ProcessCFW_B();//nowjumpintocaseCMD_A}文件编号文件版本发行类别发行部门A1■新增□修订研发中心caseCMD_A:ProcessA();break;caseCMD_B:ProcessB();break;caseCMD_C:ProcessC();break;caseCMD_D:ProcessD();break;13、代码或表达式的中间禁止插入注释说明:除非必要,不应在代码或表达中间插入注释,否则容易使代码可理解性变差。深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心14、通过正确命名使代码成为自注释的通过对函数或过程、变量、结构等正确的命名以及合理地组织代码的结构,使代码成为自注释的。说明:清晰准确的函数、变量等的命名,可增加代码可读性,并减少不必要的注释15、在代码的功能、意图层次上进行注释,提供有用、额外的信息说明:注释的目的是解释代码的目的、功能和采用的方法,提供代码以外的信息,帮助读者理解代码,防止没必要的重复注释信息。示例:如下注释意义不大。//ifreceive_flagisTRUEif(receive_flag)而如下的注释则给出了额外有用的信息。//ifmtpreceiveamessagefromlinksif(receive_flag)16、在程序块的结束行右方加注释标记,以表明某程序块的结束说明:当代码段较长,特别是多重嵌套时,这样做可以使代码更清晰,更便于阅读。示例:参见如下例子。if(...){//programcodewhile(index<MAX_INDEX){//programcode}/*endofwhile(index<MAX_INDEX)*///指明该条while语句结束}/*endofif(...)*///指明是哪条if语句结束17、注释格式深圳市德卡科技有限公司生效日期软件设计规范文件编号文件版本发行类别发行部门A1■新增□修订研发中心语句、变量定义、宏定义注释使用“//……”格式语句块、函数说明使用“/*……*/”格

温馨提示

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

最新文档

评论

0/150

提交评论