已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
. . 文件编号: 密级:内部 版本:V1.0 C+编码规范编码规范 共 16 页 二一七年四月 编 制: 校 对: 审 核: 标 审: 会 签: 批 准: . . 修订状态页修订状态页 文件名称C+编码规范 文件编号 版本V1.0 日期2017-04-06 更改章节更改内容更改页码更改日期更改人 备注: . . 目录目录 1 1前言前言.4 2 2程序布局程序布局.4 2.12.1头文件结构头文件结构 .4 2.22.2实现文件实现文件 .4 3 3命名规则命名规则.4 3.13.1文件文件.5 3.23.2类类/ /结构结构 .5 3.33.3函数函数.5 3.43.4变量变量.5 3.53.5常量、宏常量、宏 .7 3.63.6结构体结构体 .7 3.73.7枚举枚举.7 4 4代码风格与板式代码风格与板式.7 4.14.1空行的使用空行的使用 .7 4.24.2语句与代码行语句与代码行 .8 4.34.3缩进和对齐缩进和对齐 .8 4.44.4最大长度最大长度 .8 4.54.5长行拆分长行拆分 .8 4.64.6空格的使用空格的使用 .8 4.74.7修饰符的位置修饰符的位置 .10 4.84.8与常量的比较与常量的比较 .10 4.94.9类排版类排版 .10 4.104.10注释注释.11 4.10.1头文件注释.11 4.10.2类头注释.11 4.10.3变量注释.12 类、结构体、枚举变量采用如下三种形式: .12 4.10.4函数注释.12 4.10.5实现体内注释.12 5 5代码示例代码示例.13 . . 1 1前言前言 本指南的目的是通过详细阐述在 C+编码时要怎样写、不要怎样写来规避 其复杂性。这些规则可在允许代码有效使用 C+语言特性的同时使其易于管理。 2 2程序布局程序布局 2.12.1头文件结构头文件结构 头文件通常由以下几部分组成: a) 头文件注释:为方便维护,头文件和实现文件需加文件头,头文件由 版权声明、文件名内容摘要、操作三部分内容组成 b) 预处理快:为了防止头文件被重复引用,应当用 ifndef/define/endif 结构产生预处理块,命名格式:文件名全大写_H_,如 #ifndef MYGLOBAL_H_ c) 文件引用:文件引用顺序依次为 C 标准库、C+标准库、外部模块、内 部模块,注意尽量减少在头文件中#include 的数量 d) 类、结构、枚举等声明 2.22.2实现文件实现文件 实现文件通常由以下几部分组成 a) 文件引用:文件引用顺序依次为预编译头文件引用、配套头文件引用、 C 标准库、C+标准库、外部模块、内部模块预编译头文件引用。 b) 程序实现体:数据和函数的定义,按照头文件定义顺序进行实现。 3 3命名规则命名规则 好的命名规则能极大地增加可读性和可维护性。同时,对于一个有上百个 人共同完成的大项目来说,统一命名约定也是一项必不可少的内容。本章对程 序中的所有标识符(包括变量名、常量名、函数名、类名、结构名、宏定义等) 的命名做出约定。 . . 3.13.1文件文件 文件名称由一个或多个单词构成。为便于界定,每个单词的首字母要大写。 文件名称一定要能确切的表达文件的内容,禁止使用过于泛的名称,如用户管 理对话框不应该命名为 User.h 而应该命名为 UserManageDlg.h。 3.23.2类类/ /结构结构 a) C+类/结构的命名:类的名称由一个或多个单词构成。为便于界定, 每个单词的首字母要大写。 b) 推荐的组成形:类的命名推荐用“前缀” 名词或形容词名词 的形式,例如:GAnalyzer, CFastVector . 前缀为了区分不 同的工程或者模块,例如 MFC 的 CString,QT 的 QString,GIS 中的 GObject,目前本公司采用 My 开头,如 MyString。 3.33.3函数函数 a) 命名规则:函数的名称由一个或多个单词组成,首字母小写,其余每 个单词的首字母要大写。私有函数名称前加下划线。 b) 组成形式:函数名应当使用动词或者动词名词(动宾词组)的 形式。例如:getName(), getValue(), erase(), reserve() . c) 对于 bool 值获取和设置的函数采用如下格式: void setModified(bool bModified); bool isModified(); d) 针对 QT 的特别说明:Qt 下 slot 函数统一采用 on_作为前缀,如: on_MouseButtonClicked(); 3.43.4变量变量 a) 变量的命名:变量名由作用域前缀类型前缀一个或多个单词组成。 为便于界定,每个单词的首字母要大写。对于某些用途简单明了的局 部变量,也可以使用简化的方式,如:i,j,k,x,y,z. b) 作用域前缀:作用域前缀标明一个变量的可见范围。作用域可以有如 . . 下几种: m_ :类的成员变量(member) ms_ :类的静态成员变量(static member) s_ :静态变量(static) g_ :普通全局变量(global) gs_ :静态全局变量(static global) gg_ :进程或动态链接库中的全局变量(global global) 除非不得已,否则应该尽可能少使用全局变量。 c) 类型前缀:类型前缀标明一个变量的类型,主要类型如下: i :整形(int)可以下面n表示 n :整型和位域变量(number) 以“n”作为所有整形前缀是由于大多数情况下,编写程序时不需 要过多考虑整形的宽度,但在某些场合中,整形宽度是需要特别注意并 且仔细加以区分的,这时可使用如下记法代替“n”前缀: uc :字节(8bit,unsigned char , byte) w :字(16bit,word) dw :双字(32bit,double word) nn :四字(64bit,quad word) bf :位域(bit field) 对浮点型变量也有类似记法如下: f :单精度浮点(32bit,float) d :双精度浮点(64bit,double) ld :扩展精度浮点(80bit,long double) e :枚举型变量 c :char sz :传统的C字符串 (char*,char) str :字符串(std:string) map :键值容器(std:map) lis :动态数组(std:list) vec :动态数组(std:vector) deq :双端队列(std:deque) p :指针 b :bool h :HANDLE us :结构类型/联合 类型前缀可以组合使用。 d) 推荐的组成形式:变量的名字应当使用名词或者形容词名词。例 如:nCode,m_nState,nMaxWidth. . . 3.53.5常量、宏常量、宏 名称统一使用大写,标识符必须指示常量具体含义,单词间通过下划线来 界定。如:ERROR_UNKNOWN, OP_STOP 3.63.6结构体结构体 结构体使用 typedef struct 并以 tag_开头,后命名规则同类。如: typedef struct tag_History char szName32; int iIndex; History; 3.73.7枚举枚举 命名规则同内,枚举值采用枚举名缩写并采用小写开头。如 enum EquipmentPart epSamplePin= 0, epRea1Pin= 2, epRea2Pin= 4 ; 4 4代码风格与板式代码风格与板式 代码风格的重要性怎么强调都不过分。一段稍长一点的无格式代码基本上 就是不可读的。 先来看一下这方面的整体原则: 4.14.1空行的使用空行的使用 空行起着分隔程序段落的作用。空行得体(不过多也不过少)将使程序的 布局更加清晰。空行不会浪费内存,虽然打印含有空行的程序是会多消耗一些 纸张,但是值得。所以不要舍不得用空行。 在每个类声明之后、每个函数定义结束之后都要加 2 行空行。 在一个函数体内,逻揖上密切相关的语句之间不加空行,其它地方应加 空行分隔。 . . 4.24.2语句与代码行语句与代码行 一行代码只做一件事情,如只定义一个变量,或只写一条语句。这样的代 码容易阅读,并且方便于写注释。 if、for、while、do、try、catch 等语句自占一行,执行语 句不得紧跟其后。不论执行语句有多少都要加 。这样可以防止书写 和 修改代码时出现失误。 4.34.3缩进和对齐缩进和对齐 程序的分界符 和 应独占一行并且位于同一列,同时与引用它们 的语句左对齐。 之内的代码块在 右边一个制表符(4 个半角空格符)处左对齐。 如果出现嵌套的 ,则使用缩进对齐。 如果一条语句会对其后的多条语句产生影响的话,应该只对该语句做半缩 进(2 个半角空格符) ,以突出该语句。 4.44.4最大长度最大长度 代码行最大长度宜控制在 70 至 100 个字符以内。代码行不要过长,否则眼 睛看不过来,也不便于打印 (2009 年更新:随着 GUI 开发环境和高分宽屏的 普及,此规则可以视情况适当放宽) 。 4.54.5长行拆分长行拆分 长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便 突出操作符) 。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。 例如: if (very_longer_variable1 = very_longer_variable2) i10; i+)和 if (a=b) i10; i+) / 良好的风格 for(int i=0;i10;i+) / 不良的风格 for (int i = 0; i 10; i +) / 过多的空格 / = x = a Function(); 4.74.7修饰符的位置修饰符的位置 为便于理解,应当将修饰符 * 和 int* piX; int iY; / 为避免y被误解为指针,这里必须分行写。 int* Function(void* p); 4.84.8与常量的比较与常量的比较 在与宏、常量进行 =, !=, =, = 等比较运算时,应当将常量 写在运算符左边,而变量写在运算符右边。这样可以避免因为偶然写错把比较 运算变成了赋值运算的问题。 例如: if (NULL = p) / 如果把 = 错打成 =,编译器就会报错 / . 4.94.9类排版类排版 类主要包括构造函数析构函数自定义函数,变量组成: /版权注释. #ifndef MYDEMO_H_ /防止重复包含 . . #define MYDEMO_H_ /防止重复包含 /库引用尽量少,能放入实现中放入实现,特别针对动态库的封装 /内注释. class MyDemo public: /如有枚举放在最前面 /构造析构函数放在第二 / 一般函数 private: / 一般私有函数 public: / 变量定义放在后面 private: / 私有变量定义放在最后 ; #endif / MYDEMO_H_ /防止重复包含保护宏结尾 4.104.10 注释注释 4.10.1 头文件注释 头文件需加文件头,头文件由版权声明、文件名内容摘要、操作三部分内容组成: /* * Copyright (c) 2011, * All rights reserved. * * file file.h * brief 概要说明 * 详细说明 * author 作者 version V1.0 date 2016-04-26 * */ 4.10.2 类头注释 . . /* * class 类名 * brief 概要说明 * 详细说明 * author 作者 version V1.0 date 2016-04-26 */ 或者 /* 说明 */ 4.10.3 变量注释 类、结构体、枚举变量采用如下三种形式: /* 第一种在变量上面说明 */ int m_iRemove; /* * 第二种 * 在变量上面多行说明 */ int m_iRemove; int m_iRemove;/! 第三种在变量右边说明 4.10.4 函数注释 /* * 函数说明 * param 变量名称 变量说明 * return void 返回值说明 */ 4.10.5 实现体内注释 注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不可放 在下方。 边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一 致性。不再有用的注释要删除。 注释应当准确、易懂,防止注释有二义性。错误的注释不但无益反而有害。 当代码比较长,特别是有多重嵌套时,应当在一些段落的结束处加注释, . . 便于阅读。 5 5代码示例代码示例 头文件示例: /* * Copyright (c) 2017, * All rights reserved. * * file MyDemo.h * 完整的代码示例 * * author XXX version V1.0 date 2017-04-06 * */ #ifndef MYDEMO_H_ /防止重复包含 #define MYDEMO_H_ /防止重复包含 /库引用尽量少,能放入实现中放入实现,特别针对动态库的封装 #include /C标准库引用 #include /C+标准库引用 #include MyHelper.h /外部库引用 #include MyGlobal.h /内部引用 /* 枚举说明 */ enum EquipmentPart epSamplePin = 0, /! 枚举值说明 epRea1Pin = 2, /! 枚举值说明 epRea2Pin = 4 /! 枚举值说明 ; /* 结构体说明 */ typedef struct tag_History char szName32; /! 结果体变量
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 管道施工现场奖惩制度
- 书法课的奖罚制度
- 物流企业安全奖惩制度
- 警务人员激励奖惩制度
- 医院新农合工作奖惩制度
- 医生门诊奖惩制度范本大全
- 品牌督导奖惩制度汇编
- 关于物业员工奖惩制度
- 技术研发中心奖惩制度
- 物业岗位考核奖惩制度
- 聚氨酯地坪施工方案及工艺要求
- 常压储罐完整性管理系统:构建、应用与展望
- 电力线路巡检报告模板
- 劳务合同2026年合同协议
- 2025年高职(金融科技应用)金融科技基础专项测试试题及答案
- 理疗店应急预案(3篇)
- 2026年新疆生产建设兵团兴新职业技术学院单招职业技能测试题库及答案详解一套
- 鼾症科普宣传课件
- 义务教育《英语课程标准》(2025年修订版)原版核心框架+深度解读+测试题及答案
- 配电箱设备防护维护技术方案
- 2026年苏州工业职业技术学院单招综合素质考试题库附答案
评论
0/150
提交评论