6 、编码规范

上传人:dfg****19 文档编号:240763425 上传时间:2024-05-05 格式:PPT 页数:38 大小:1.06MB
返回 下载 相关 举报
6 、编码规范_第1页
第1页 / 共38页
6 、编码规范_第2页
第2页 / 共38页
6 、编码规范_第3页
第3页 / 共38页
点击查看更多>>
资源描述
2024/5/52024/5/52024/5/5C/C+编码规范Version 1.02010年年4月月2024/5/52Overview课程介绍课程内容案例分析参考资料2024/5/53课程介绍课程介绍课程目标预备知识目标听众日程表词汇表2024/5/54课程目标课程目标熟悉编码规范遵照规范编写代码2024/5/55C/C+语言基础知识预备知识预备知识2024/5/56项目经理配置管理人员开发人员技术管理人员目标听众目标听众2024/5/57共计:1个小时详细安排课程介绍课程介绍 文件布局文件布局命名规则命名规则代码风格和版式代码风格和版式Total:hours日程表日程表词汇表词汇表UML:UnifiedModelingLanguage统一建模语言2024/5/58文件的组织结构文件的组织结构由于项目性质、规模上存在着差异,不同项目间的文件组织形式差别很大。但文件、目录组织的基本原则应当是一致的:使外部接口与内部实现尽量分离;尽可能清晰地表达软件的层次结构。2024/5/59文件的组织结构文件的组织结构功能模块/库的文件组织形式,参考下图2024/5/510contrib当前项目所依赖的所有第三方软件,可当前项目所依赖的所有第三方软件,可以按类别分设子目录。以按类别分设子目录。doc项目文档include声明外部接口的所有头文件和内联定义文件。lib编译好的二进制库文件,可以按编译器、平台分设子目录。makefile用于编译项目的makefile文件和project文件等。可以按编译器、平台分设子目录。src所有实现文件和声明内部接口的头文件、内联定义文件。可按功能划分;支持编译器、平台等类别分设子目录。test存放测试用代码的目录。文件的组织结构文件的组织结构应用程序的文件组织形式2024/5/511contrib当前项目所依赖的所有第三方软件,可以当前项目所依赖的所有第三方软件,可以按类别分设子目录。按类别分设子目录。doc项目文档makefile用于编译项目的makefile文件和project文件等。可以按编译器、平台分设子目录。setup安装程序,以及制作安装程序所需要的项目文件和角本。src所有源文件。可按功能划分;支持编译器、平台等类别分设子目录。test存放测试用代码的目录。文件的组织结构文件的组织结构文件的注释2024/5/512命名规则命名规则在软件开发这一高度抽象而且十分复杂的活动中,命名规则的重要性更显得尤为突出。一套定义良好并且完整的、在整个项目中统一使用的命名规范将大大提升源代码的可读性和软件的可维护性:2024/5/513命名规则命名规则2024/5/514在引入细节之前,先说明一下命名规范的整体原则(七点):同一性同一性在编写一个子模块或派生类的时候,要遵循其基在编写一个子模块或派生类的时候,要遵循其基类或整体模块的命名风格,保持命名风格在整个类或整体模块的命名风格,保持命名风格在整个模块中的同一性。模块中的同一性。标识符组成标识符采用英文单词或其组合,应当直观且可以拼读,可望文知意,用词应当准确。最小化长度&最大化信息量原则在保持一个标识符意思明确的同时,应当尽量缩短其长度。避免过于相似不要出现仅靠大小写区分的相似的标识符,例如“i”与“I”,“function”与“Function”等等。避免在不同级别的作用域中重名程序中不要出现名字完全相同的局部变量和全局变量,尽管两者的作用域不同而不会发生语法错误,但容易使人误解。命名规则命名规则在引入细节之前,先说明一下命名规范的整体原则2024/5/515避免在不同级别的作用避免在不同级别的作用域中重名域中重名用正确的反义词组命名具有互斥意义的标识符,如:用正确的反义词组命名具有互斥意义的标识符,如:nMinValue 和和 nMaxValue,GetName()和和 SetName().避免名字中出现数字编号尽量避免名字中出现数字编号,如Value1,Value2等,除非逻辑上的确需要编号。这是为了防止程序员偷懒,不肯为命名动脑筋而导致产生无意义的名字(因为用数字编号最省事)。类类/结构结构除了异常类等个别情况(不希望被用户看作一个普通的、正常的类之情况)外,C+类/结构的命名应该遵循以下准则:16C+类类/结构的命名结构的命名类的名称都要以大写字母类的名称都要以大写字母“C”开头,后跟一个或多个单开头,后跟一个或多个单词。为便于界定,每个单词的首字母要大写。词。为便于界定,每个单词的首字母要大写。另一个与接口相似的概念是类型,类型与接口的不同点另一个与接口相似的概念是类型,类型与接口的不同点在于,类型可以包含部分接口的实现或包含一些接口默在于,类型可以包含部分接口的实现或包含一些接口默认的或不完整的实现,一个类型也可以包含一些属性。认的或不完整的实现,一个类型也可以包含一些属性。规定类型类要以大写字母规定类型类要以大写字母“T”开头。例如:轿车类型开头。例如:轿车类型 TCar、线程类型、线程类型 TThread 等等。在等等。在C种,种,类型类也叫做结点类。类型类也叫做结点类。推荐的组成形式类的命名推荐用名词或形容词名词的形式,例如:CAnalyzer,CFastVector,IUnknown,IDBWriter,TTimer,TThread.传统C结构体的命名传统C结构体的名称全部由大写字母组成,单词间使用下划线界定,例如:SERVICE_STATUS,DRIVER_INFO.函数函数函数的命名函数的命名 函数的名称由一个或多个单词组成。为便于界定,每个单词的首函数的名称由一个或多个单词组成。为便于界定,每个单词的首字母要大写。字母要大写。推荐的组成形式函数名应当使用动词或者动词名词(动宾词组)的形式。例如:GetName(),SetValue(),Erase(),Reserve().保护成员函数保护成员函数的开头应当加上一个下划线“_”以示区别,例如:_SetState().私有成员函数类似地,私有成员函数的开头应当加上两个下划线“_”,例如:_DestroyImp().回调和事件处理函数回调和事件处理函数习惯以单词“On”开头。例如:_OnTimer(),OnExit().虚函数回调函数以外的虚函数习惯以“Do”开头,如:DoRefresh(),_DoEncryption().17函数函数18函数的注释变量变量变量应该是程序中使用最多的标识符了,变量的命名规范可能是一套C+命名准则中最重要的部分19变量的命名变量的命名变量名由作用域前缀类型前缀一个或多个单词组成。为变量名由作用域前缀类型前缀一个或多个单词组成。为便于界定,每个单词的首字母要大写。便于界定,每个单词的首字母要大写。对于某些用途简单对于某些用途简单明了的局部变量,也可以使用简化的方式,如:明了的局部变量,也可以使用简化的方式,如:i,j,k,x,y,z.作用域前缀作用域前缀标明一个变量的可见范围。作用域可以有如下几种:无 局部变量m_类的成员变量(member)sm_类的静态成员变量(staticmember)s_静态变量(static)g_外部全局变量(global)sg_静态全局变量(staticglobal)gg_进程或动态链接库间共享的全局变量(globalglobal)除非不得已,否则应该尽可能少使用全局变量。变量变量类型前缀类型前缀类型前缀标明一个变量的类型,可以有如下几种:类型前缀标明一个变量的类型,可以有如下几种:n 整型和位域变量(整型和位域变量(number)e 枚举型变量(枚举型变量(enumeration)c 字符型变量(字符型变量(char)b 布尔型变量(布尔型变量(bool)F 浮点型变量(浮点型变量(float)p 指针型变量和迭代子(指针型变量和迭代子(pointer)pfn 指向函数的指针变量或指向函数对象的指针(指向函数的指针变量或指向函数对象的指针(pointer of function)pm 指向成员的指针(指向成员的指针(pointer of member)g 数组(数组(grid)fo 函数对象(函数对象(Function Object)i 类的实例(类的实例(instance)对于经常用到的类,也可以定义一些专门的前缀,如:对于经常用到的类,也可以定义一些专门的前缀,如:std:string和和std:wstring类的前缀可以定义为类的前缀可以定义为“st”,std:vector类的前缀类的前缀可以定义为可以定义为“v”等等。等等。推荐的组成形式变量的名字应当使用名词或者形容词名词。例如:nCode,m_nState,nMaxWidth.2024/5/520常量常量C+中引入了对常量的支持,常量的命名规则如下:2024/5/521常量的命名常量的命名常量名由类型前缀全大写字母组成,单词间通常量名由类型前缀全大写字母组成,单词间通过下划线来界定,如:过下划线来界定,如:cDELIMITER,nMAX_BUFFER.类型前缀的定义与变量类型前缀的定义与变量命名规则中的相同命名规则中的相同枚举、联合、typedef枚举、联合及typedef语句都是定义新类型的简单手段,它们的命名规则为:2024/5/522枚举、联合的命枚举、联合的命名名由枚举、联合语句定义的类型名由全大写字母组成,由枚举、联合语句定义的类型名由全大写字母组成,单词间通过下划线来界定,如:单词间通过下划线来界定,如:FAR_PROC,ERROR_TYPE.typedef的命名通常情况下,typedef语句定义的类型名,其命名规范与枚举及联合语句相同,也采用大写字母加下划线的原则。但是在定义一个模板类实例的别名时,为清晰起见,可以考虑酌情使用类的命名原则,例如:typedefCWriterCSysFileWriter;typedefstd:vectorVINT;名空间名空间2024/5/523C+名空间是“类”概念的一种退化(大体相当于只包含静态成员且不能实例化的类)。它的引入为标识符名称提供了更好的层次结构,使标识符看起来更加直观简捷,同时大大降低了名字冲突的可能性。名空间的命名空间的命名名名空间的名称不应该过长,通常名空间的名称不应该过长,通常都使用缩写的形式来命名。都使用缩写的形式来命名。代码风格与版式代码风格与版式代码风格的重要性怎么强调都不过分。一段稍长一点的无格式代码基本上就是不可读的。2024/5/524空行的使用空行起着分隔程序段落的作用。空行得体(不过多也不过少)将使程序的布局更加清晰。空行不会浪费内存,虽然打印含有空行的程序是会多消耗一些纸张,但是值得。所以不要舍不得用空行。在每个类声明之后、每个函数定义结束之后都要加2行空行。在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。代码风格与版式代码风格与版式2024/5/525语句与代码行一行代码只做一件事情,如只定义一一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代个变量,或只写一条语句。这样的代码容易阅读,并且方便于写注释。码容易阅读,并且方便于写注释。if、for、while、do、try、catch 等语句自占一行,等语句自占一行,执行语句不得紧跟其后。不论执行语执行语句不得紧跟其后。不论执行语句有多少都要加句有多少都要加 。这样可以。这样可以防止书写防止书写 和修改代码时出现失误。和修改代码时出现失误。代码风格与版式代码风格与版式2024/5/526缩进和对齐程序的分界符和应独占一行并且位于同一列,同时与引用它们的语句左对齐。之内的代码块在右边一个制表符(4个半角空格符)处左对齐。如果出现嵌套的,则使用缩进对齐。如果一条语句会对其后的多条语句产生影响的话,应该只对该语句做半缩进(2个半角空格符),以突出该语句。代码风格与版式代码风格与版式2024/5/527代码风格与版式代码风格与版式2024/5/528最大长度代码行最大长度宜控制在70至80个字符以内。代码行不要过长,否则眼睛看不过来,也不便于打印(2009年更新:随着GUI开发环境和高分宽屏的普及,此规则可以视情况适当放宽)。长行拆分长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。代码风格与版式代码风格与版式例如:2024/5/529代码风格与版式代码风格与版式空格的使空格的使用用l关键字之后要留空格。象关键字之后要留空格。象 const、virtual、inline、case 等关键字之后至少要留一个空等关键字之后至少要留一个空格,否则无法辨析关键字。象格,否则无法辨析关键字。象 if、for、while、catch 等关键字之后应留一个空格再等关键字之后应留一个空格再跟左括号跟左括号(,以突出关键字。,以突出关键字。l函数名之后不要留空格,紧跟左括号函数名之后不要留空格,紧跟左括号(,以与关,以与关键字区别。键字区别。(向后紧跟。而向后紧跟。而)、,、;向前紧跟,紧跟向前紧跟,紧跟处不留空格。处不留空格。l,之后要留空格,如之后要留空格,如 Function(x,y,z)。如果如果;不是一行的结束符号,其后要留空格,如不是一行的结束符号,其后要留空格,如 for(initialization;condition;update)。2024/5/530代码风格与版式代码风格与版式空格的空格的使用使用l赋值操作符、比较操作符、算术操作符、逻赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如辑操作符、位域操作符,如=、+=、=、+、*、%、&、|、这类操作符前后不加空这类操作符前后不加空格。格。l对于表达式比较长的对于表达式比较长的for、do、while、switch语句和语句和if语句,为了紧凑起见可以适语句,为了紧凑起见可以适当地去掉一些空格,如当地去掉一些空格,如for(i=0;i10;i+)和和if(a=b)&(c=,=等比较运算时,应当将等比较运算时,应当将常量写在运算符左边,而变量写在运常量写在运算符左边,而变量写在运算符右边。这样可以避免因为偶然写算符右边。这样可以避免因为偶然写错把比较运算变成了赋值运算的问题。错把比较运算变成了赋值运算的问题。代码风格与版式代码风格与版式2024/5/536为增强代为增强代码的可读码的可读性而定义性而定义的宏的宏以下预定义宏对程序的编译没有任何影响,以下预定义宏对程序的编译没有任何影响,只为了增加代码的可读性:只为了增加代码的可读性:宏宏 说明说明NOTE 需要注意的代码需要注意的代码TODO 尚未实现的接口、类、算法等尚未实现的接口、类、算法等UNDONE已取消的接口、类、算法等已取消的接口、类、算法等FOR_DBG 标记为调试方便而临时增标记为调试方便而临时增加的代码加的代码OK 仅用于调试的标记仅用于调试的标记参考资料参考资料高质量C+/C编程指南C/C+编程规范(华为)C+编码规范(中兴)UML用户指南2024/5/5372024/5/538Question?THANK YOU
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 方案规范


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!