C++_编码规范_小组规范_V1.0

合集下载

CC语言安全编程规范V精编版

CC语言安全编程规范V精编版

C C语言安全编程规范V公司内部编号:(GOOD-TMMT-MMUT-UUPTY-UUYY-DTTI-华为技术有限公司内部技术规范DKBA 6914-2013.05 C&C++语言安全编程规范2013年05月07日发布 2013年05月07日实施华为技术有限公司Huawei Technologies Co., Ltd.版权所有侵权必究修订声明本规范拟制与解释部门:网络安全技术能力中心本规范的相关系列规范或文件:《Java语言安全编程规范》《Web应用安全开发规范》相关国际规范或文件一致性:无替代或作废的其它规范或文件:无相关规范或文件的相互关系:本规范作为《C语言编程规范》和《C++语言编程规范》安全性要求的补充和扩展。

目录C&C++语言安全编程规范0规范制定说明0.1前言随着公司业务发展,越来越多的产品被公众、互联网所熟知,并成为安全研究组织的研究对象、黑客的漏洞挖掘目标,容易引起安全问题。

安全问题影响的不只是单个产品,甚至有可能影响到公司整体声誉。

产品安全涉及需求、设计、实现、部署多个环节,实现的安全是产品安全的重要一环。

为了帮助产品开发团队编写安全的代码,减少甚至规避由于编码错误引入安全风险,特制定本规范。

《C&C++语言安全编程规范》参考业界安全编码的研究成果,并结合产品编码实践的经验总结,针对C/C++语言编程中的字符串操作、整数操作、内存管理、文件操作、STL库使用等方面,描述可能导致安全漏洞或潜在风险的常见错误。

以期减少缓冲区溢出、整数溢出、格式化字符串攻击、命令注入攻击、目录遍历等典型安全问题。

0.2使用对象本规范的读者及使用对象主要为使用C和C++语言的开发人员、测试人员等。

0.3适用范围本规范适合于公司基于C或C++语言开发的产品。

0.4术语定义原则: 编程时必须遵守的指导思想。

规则:编程时必须遵守的约定。

建议:编程时必须加以考虑的约定。

说明:对此原则/规则/建议进行必要的解释。

编码规范

编码规范

编码规范(V.01仅供内部使用)一、布局结构规范每个源程序文件的头部必须包含文件头部说明(文件名称、软件版权、功能说明、系统版本、开发人员、开发时间)和修改记录说明(修改日期、修改人员、修改说明)。

每个函数头部必须包含函数头部说明(使用会自动生成XML格式注释框架。

)。

二、书写排版规范2.1、空行每个函数定义结束之后都要加一个或若干个空行。

在一个函数体内,变量定义与函数语句之间要加空行。

逻揖上密切相关的语句之间不加空行,其它地方应加空行分隔。

2.2、对齐程序的分界符‘{’和‘}’永远都单独成行并且位于同一列,同时与引用它们的语句左对齐。

2.3、缩行用缩行显示程序结构,使排版整齐,缩进量统一使用TAB,而不能用空格补齐。

同层次的代码在同层次的缩进层上。

三、语言规范3.1、常量全用大写字母命名,用下划线分割单词。

3.2、变量声明变量的同时对变量进行初始化,严禁使用未经初始化的变量。

3.3、表达式如果代码行中的运算符比较多,用括号确定表达式的操作顺序,避免使用默认的优先级。

不要有多用途的复合表达式(例如:d = (a = b + c) + r;该表达式既求a 值又求d 值。

应该拆分为两个独立的语句:a = b + c;d = a + r;)。

尽量避免含有否定运算的条件表达式(如: if (!(num >= 10))应改为: if(num < 10))。

3.4、语句if 语句本身自占一行,执行语句不得紧跟其后。

不论执行语句有多少都要加{}。

3.5、属性原则上,字段(Field)是不能公开的,要访问字段的值,一般使用属性。

属性以简洁清晰的名词命名。

3.6、函数不要将正常值和错误标志混在一起返回。

正常值用输出参数获得,而错误用异常捕获。

在函数体的“入口处”,对参数和通过其它途径进入函数体内的变量(如文件句柄等)的有效性进行检查。

函数的功能要单一,不要设计多用途的函数。

避免函数有太多的参数,参数个数尽量控制在5 个以内。

C++编程规范及要求

C++编程规范及要求

C++编码规范及要求王卓有关C、C++的编码风格和程序质量可以参照《高质量C/C++编程》1 概述错误!未定义书签。

2 字体及颜色错误!未定义书签。

3 文件结构错误!未定义书签。

文件头注释错误!未定义书签。

头文件错误!未定义书签。

实现文件错误!未定义书签。

文件的组织结构错误!未定义书签。

4 命名规则错误!未定义书签。

类/结构错误!未定义书签。

函数错误!未定义书签。

变量错误!未定义书签。

常量错误!未定义书签。

枚举、联合、typedef 错误!未定义书签。

宏、枚举值错误!未定义书签。

名空间错误!未定义书签。

5 代码风格与版式错误!未定义书签。

类/结构错误!未定义书签。

函数错误!未定义书签。

变量、常量错误!未定义书签。

枚举、联合、typedef 错误!未定义书签。

宏错误!未定义书签。

名空间错误!未定义书签。

异常错误!未定义书签。

概述高品质、易维护的软件开发离不开清晰严格的编码规范。

本文档详细描述C++软件开发过程中的编码规范。

本规范也适用于所有在文档中出现的源码。

字体及颜色强烈推荐采用Visual Assist X作为Visual Studio的辅助工具。

在编辑源码时,应该根据编辑器支持的自定义选项最大限度地满足下表定义的高亮规范。

Windows平台中,应该优先使用字体:Fixedsys,这也是操作系统UI(所有的菜单、按钮、标题栏、对话框等等)默认使用的字体。

该字体的好处很多:1、兼容性好:所有Windows平台都支持该字体2、显示清晰:该字体为点阵字体,相对于矢量字体来说在显示器中呈现的影像更为清晰。

矢量字体虽然可以自由缩放,但这个功能对于纯文本格式的程序源码来说没有任何实际作用。

而且当显示字号较小(12pt以下)时,矢量字体还有一些明显的缺陷:文字的边缘会有严重的凹凸感。

一些笔画的比例也会失调。

开启了柔化字体边缘后,还会使文字显得模糊不清。

3、支持多语言:Fixedsys是UNICODE字体,支持世界上几乎所有的文字符号。

Google_C++编码规范中文版

Google_C++编码规范中文版

Google C++编程风格指南edisonpeng 整理2009/3/25目录背景 (3)头文件 (4)作用域 (8)类 (13)来自Google 的奇技 (20)其他C++特性 (32)命名约定 (32)注释 (38)格式 (44)规则特例 (57)背景C++ 是Google 大部分开源项目的主要编程语言. 正如每个C++ 程序员都知道的, C++ 有很多强大的特性, 但这种强大不可避免的导致它走向复杂,使代码更容易产生bug, 难以阅读和维护.本指南的目的是通过详细阐述C++ 注意事项来驾驭其复杂性. 这些规则在保证代码易于管理的同时, 高效使用C++ 的语言特性.风格, 亦被称作可读性, 也就是指导C++ 编程的约定. 使用术语―风格‖ 有些用词不当, 因为这些习惯远不止源代码文件格式化这么简单.使代码易于管理的方法之一是加强代码一致性. 让任何程序员都可以快速读懂你的代码这点非常重要. 保持统一编程风格并遵守约定意味着可以很容易根据―模式匹配‖ 规则来推断各种标识符的含义. 创建通用, 必需的习惯用语和模式可以使代码更容易理解. 在一些情况下可能有充分的理由改变某些编程风格, 但我们还是应该遵循一致性原则,尽量不这么做. 本指南的另一个观点是C++ 特性的臃肿. C++ 是一门包含大量高级特性的庞大语言. 某些情况下, 我们会限制甚至禁止使用某些特性. 这么做是为了保持代码清爽, 避免这些特性可能导致的各种问题. 指南中列举了这类特性, 并解释为什么这些特性被限制使用.Google 主导的开源项目均符合本指南的规定.注意: 本指南并非C++ 教程, 我们假定读者已经对C++ 非常熟悉.1、头文件通常每一个.cc文件都有一个对应的.h文件. 也有一些常见例外, 如单元测试代码和只包含main()函数的.cc文件.正确使用头文件可令代码在可读性、文件大小和性能上大为改观.下面的规则将引导你规避使用头文件时的各种陷阱.1.1. #define 保护Tip所有头文件都应该使用#define防止头文件被多重包含, 命名格式当是: <PROJECT>_<PATH>_<FILE>_H_为保证唯一性, 头文件的命名应该依据所在项目源代码树的全路径. 例如, 项目foo中的头文件foo/src/bar/baz.h可按如下方式保护:#ifndef FOO_BAR_BAZ_H_#define FOO_BAR_BAZ_H_…#endif // FOO_BAR_BAZ_H_1.2. 头文件依赖Tip能用前置声明的地方尽量不使用#include.当一个头文件被包含的同时也引入了新的依赖, 一旦该头文件被修改, 代码就会被重新编译. 如果这个头文件又包含了其他头文件, 这些头文件的任何改变都将导致所有包含了该头文件的代码被重新编译. 因此, 我们倾向于减少包含头文件, 尤其是在头文件中包含头文件.使用前置声明可以显著减少需要包含的头文件数量. 举例说明: 如果头文件中用到类File, 但不需要访问File类的声明, 头文件中只需前置声明class File;而无须#include "file/base/file.h".不允许访问类的定义的前提下, 我们在一个头文件中能对类Foo做哪些操作?∙我们可以将数据成员类型声明为Foo *或Foo &.∙我们可以将函数参数/ 返回值的类型声明为Foo (但不能定义实现).∙我们可以将静态数据成员的类型声明为Foo, 因为静态数据成员的定义在类定义之外.反之, 如果你的类是Foo的子类, 或者含有类型为Foo的非静态数据成员, 则必须包含Foo所在的头文件.有时, 使用指针成员(如果是scoped_ptr更好) 替代对象成员的确是明智之选. 然而, 这会降低代码可读性及执行效率, 因此如果仅仅为了少包含头文件,还是不要这么做的好.当然.cc文件无论如何都需要所使用类的定义部分, 自然也就会包含若干头文件.1.3. 内联函数Tip只有当函数只有10 行甚至更少时才将其定义为内联函数.定义:当函数被声明为内联函数之后, 编译器会将其内联展开, 而不是按通常的函数调用机制进行调用.优点:当函数体比较小的时候, 内联该函数可以令目标代码更加高效. 对于存取函数以及其它函数体比较短, 性能关键的函数, 鼓励使用内联.缺点:滥用内联将导致程序变慢. 内联可能使目标代码量或增或减, 这取决于内联函数的大小. 内联非常短小的存取函数通常会减少代码大小, 但内联一个相当大的函数将戏剧性的增加代码大小. 现代处理器由于更好的利用了指令缓存, 小巧的代码往往执行更快。

Google的Objective-C编码规范

Google的Objective-C编码规范

Google的Objective-C编码规范总览背景知识Objective-C是一个C语言的扩展语言,非常动态,非常的“面向对象”,它被设计成既拥有复杂的面向对象设计理念又可以轻松使用与阅读的语言,也是Mac OS X和iPhone开发的首选语言。

Cocoa是Mac OS X的主要应用框架,提供迅速开发各种功能的Mac OS X应用的Objective-C 类集合。

Apple已经有一个很好也被广泛接受的Objective-C的编程规范,Google也有类似的C++编程规范,这份Objective-C编程规范很自然是Apple和Google的共同推荐的组合。

所以,在阅读本规范前,确保你已经阅读了:Apple's Cocoa Coding GuidelinesGoogle's Open Source C++ Style Guide注意所有已在Google的C++编程规范里的禁用条款在Objective-C里也适用,除非本文档明确指出反对意见。

本文档旨在描述可供可适用于所有Mac OS X代码的Objective-C(包括Objective-C++)编码规范和实践。

规范中的许多条款已经改进也不断的被其他的项目和团队所证明其指导性。

Google的相关开源项目都遵守此规范。

Google已经发布了一份作为Google Toolbox for Mac project (文档中简称为GTM)的组成部分的遵守本规范的开源代码。

这份开放代码也是本文很好的例证(原文看不太懂--Code meant to be shared across different projects is a good candidate to be included in this repository. )注意本文不是Objective-C的教学指南,我们假设读者已经了解语言。

如果你是一个Objective-C 的初学者或需要重温,请阅读The Objective-C Programming Language .示例人们说一个例子胜过千言万语,所以就让我们用例子来让你感受以下编码规范的风格,留间距,命名等等。

C&C++(ProC)编码规范_cgd

C&C++(ProC)编码规范_cgd

浪潮世科(山东)信息技术有限公司文档修订目录1.规范说明 (4)1.1背景说明 (4)1.2目的 (4)1.3内容说明........................................................................................ 错误!未定义书签。

2.C/C++编程规范 (4)2.1代码组织与风格 (4)2.2注释 (5)2.3命名 (5)2.4声明 (6)2.5表达式和语句 (6)2.6复用 (7)2.7特殊限制 (8)附1. 格式模板 (9)1.命名的约定 (9)2.注释 (11)3.编程风格 (12)1.规范说明1.1背景说明大型软件项目通常由相应的大型开发团队承担。

大型团队生成的代码要有项目范围内可评测的质量,代码必须遵从于某一标准并以此来评价。

1.2目的本文表述C/C++ 编程的规则,用来作为编程的标准,使达到以下目的:♦增加开发过程代码的强壮性、可读性、易维护性♦在项目范围内统一代码风格。

♦通过人为以及自动的方式对最终软件应用质量标准。

♦使新的开发人员快速适应项目氛围。

2.C/C++编程规范2.1代码组织与风格1)可读性第一,效率第二。

2)程序首先是正确,其次是优美。

3)程序结构清晰,简单易懂。

4)循环、分支层次不要超过五层。

5)使用括号以避免二义性。

6)对嵌套语句使用小的、一致的缩进风格。

缩进量一致并以Tab键为单位,定义Tab为 4个空格,不要空格和TAB键混合使用7)防止重复文件包含的保护例:#ifndef _WINSS_H_#define _WINSS_H_…………#endif)头文件的作用早期的编程语言如Basic、Fortran没有头文件的概念,C++/C语言的初学者虽然会用使用头文件,但常常不明其理。

这里对头文件的作用略作解释:(1)通过头文件来调用库功能。

在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。

软件编码规范详述

软件编码规范详述软件编码规范中国人民银行清算总中心支付系统开发中心注:变化状态:A—增加,M—修改,D—删除目录第一篇C/C++编码规范 (6)第一章代码组织 (6)第二章命名 (8)2.1文件命名 (8)2.2变量命名 (8)2.3常量与宏命名 (9)2.4类命名 (9)2.5函数命名 (9)2.6参数命名 (10)第三章注释 (11)3.1文档化注释 (11)3.2语句块注释 (16)3.3代码爱护注释 (19)第四章编码风格 (21)4.1排版风格 (21)4.2头文件 (25)4.3宏定义 (26)4.4变量与常量 (29)4.5条件判定 (31)4.6空间申请与开释 (32)4.7函数编写 (32)4.8类的编写 (35)4.9专门处理 (38)4.10专门限制 (38)第五章编译 (40)第六章ESQL/C编码 (45)第二篇JAVA编码规范 (46)第一章代码组织 (47)第二章命名 (50)2.1包命名 (50)2.2类命名 (50)2.3接口命名 (50)2.4方法命名 (50)2.5变量命名 (50)2.6类变量命名 (50)2.7常量命名 (51)2.8参数命名 (51)第三章注释 (52)3.1文档化注释 (52)3.2语句块注释 (56)3.3代码爱护注释 (57)第四章编码风格 (59)4.1排版风格 (59)4.2包与类引用 (64)4.3变量与常量 (64)4.4类编写 (65)4.5方法编写 (66)4.6专门处理 (69)4.7专门限制 (69)第五章编译 (71)第六章JSP编码 (72)6.1文件命名及存放位置 (72)6.2内容组织 (72)6.3编码风格 (73)6.4注释 (76)6.5缩进与对齐 (76)6.6表达式 (77)6.7JavaScript (77)第三篇POWERBUILDER编码规范 (78)第一章代码组织 (79)第二章命名 (80)2.1文件命名 (80)2.2对象命名 (80)2.3变量命名 (82)2.4常量命名 (83)2.5函数与事件命名 (83)2.6参数命名 (83)第三章注释 (83)3.1文档化注释 (83)3.2语句块注释 (85)3.3代码爱护注释 (86)第四章编码风格 (87)4.1界面风格 (87)4.2排版风格 (90)4.3变量与常量 (93)4.4条件判定 (93)4.5空间申请与开释 (94)4.6函数编写 (94)4.7专门限制 (94)第五章SQL编码 (95)前言程序编码是一种艺术,既灵活又严谨,充满了制造性与奇思妙想。

中国铁塔动环监控系统统一编码及命名要求规范

主题:铁塔集团、统一编码、铁塔统一编码、铁塔命名规范中国铁塔动环监控系统统一编码及命名规范(试行)版本:V1.0中国铁塔股份有限公司2014年11月目录1.适应范围 (4)2.引用、参考文件 (4)3.机房及局站分类 (4)4.局站命名与编码规范 (5)4.1 测点编码规范 (5)4.2 局站命名规范 (9)4.3 设备命名规范 (10)5.告警分类及处理时限 (16)6.中国铁塔动环监控系统信号字典表 (16)6.1 信号ID具体定义 (16)6.2 中国铁塔动环监控系统信号标准化命名规范 (17)7.告警关联过滤规则 (17)7.1 停电告警过滤规则 (17)7.2 某一个智能设备关机或停电告警过滤规则 (19)7.3 高频次告警处理规则 (19)7.4 监控设备本身告警处理规则 (19)前言为加强中国铁塔动力环境集中监控系统(以下简称动环监控系统)集约化建设,实现动环监控系统对全省动力设备和环境的统一监控、统一派单的目标,特制定中国铁塔动环监控系统省级集约化技术规范。

本规范明确了动环监控系统的区域、局站、设备的统一编码及命名规范、监控系统统一的监控信号和告警信号编码定义、告警过滤原则。

本规范作为动环监控系统的建设标准,同时也可作为接入中国铁塔监控系统平台的各动环厂家软、硬件技术设备的技术参考依据。

1.适应范围本规范规定了中国铁塔动环监控系统局站命名、设备命名及测点命名的方法与相应编码规则。

本规范适应于中国铁塔动环监控系统平台乃至全国动环监控系统平台规划建设、使用和维护管理,也适合接入中国铁塔动环监控平台的各监控厂家硬、软件开发工作指导。

2.引用、参考文件下列文件对本文件的应用是必不可少的。

凡是注日期的引用文件,仅注日期的版本适用于本文件。

凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。

YD/T 1363-2005 通信局(站)电源、空调及环境集中监控系统中国铁塔动力环境集中监控系统技术规范3.机房及局站分类通信机房维护责任单位根据通信机房内的通信系统设备在通信网络中所处的地位、网元设备的重要性,以及所服务用户的不同服务等级,根据机房分类原则对通信机房进行具体分类。

C++编码规范

C++编码规范严谨编码风格的重要性:1.便于代码合并,满⾜团队开发的需要2.合格程序员的必备素质3.防⽌编码错误4.易读易理解Google C++编码规范(中⽂版)1.头⽂件尽可能多的使⽤前向声明好处:较少的⽂件依赖,减少编译时间. 更加明确的类的依赖关系.1//.h中类B使⽤类A,使⽤前向声明就不需要包含类A的头⽂件,减少编译⼯作量2class CA; //前向声明⼀个类A3class CB4 {5public:6 CA* m_pA;//声明类A的指针7 CA* GetClassA(CA *pA, CA &a); //声明使⽤类A作为形参或返回值类型的函数8//CA m_A; Error,不能定义类A的对象9 };2.函数的参数顺序,输⼊参数在前,输出参数在后输⼊参数⼀般为传值或者指针,引⽤,前⾯加const输出参数⼀般为⾮常量指针或者引⽤好处:根据参数的位置明确参数的作⽤,⼀⽬了然1//输⼊参数: nInput cInput szInput2//输出参数: nOutPut3void Fun(const int nInput, const char cInput, const char* pStrInput, int &nOutPut);3.头⽂件的包含顺序stdafx.h预编译头⽂件先包含当前源⽂件对应的头⽂件C系统头⽂件C++系统头⽂件其它库头⽂件本项⽬其它头⽂件每个区域之间空⼀⾏好处:增加可读性1 #include "stdafx.h"//预编译头⽂件23 #include "test.h"//当前源代码对应的头⽂件45 #include <stdio.h> //C标准库67 #include <iostream> //C++标准库89 #include "library/read.h"//其它库头⽂件10 #include "library/write.h"1112 #include "one.h"//当前项⽬下其它头⽂件13 #include "two.h"4.局部变量初始化,声明变量后⽴即进⾏赋值初始化好处:避免未初始化产⽣的潜在错误1int nA = 0;2char szB = '\0';3float fC = 0.00f;4char szBuff[16] = {0}; //注意:初始化时指定的的元素个数⽐数组⼤⼩少,剩下的元素都回被初始化为05 StPeople tPeople = {0};5.类的初始化1class CStudent2 {3public:4 CStudent():m_nAge(0),m_fScore(0.00f){}5 CStudent(int nAge, float fScore):m_nAge(nAge),m_fScore(fScore){};6private:7int m_nAge;8float m_fScore;9 };10int _tmain(int argc, _TCHAR* argv[])11 {12 CStudent student; //使⽤⽆参的构造函数初始化 m_nAge=0 m_fScore=0.00f13 CStudent studentTwo(20,99.5); //使⽤初始化例表构造函数初始化 m_nAge=20 m_fScore=99.5f14 }6.局部变量是个对象,应该避免多次调⽤构造与析构1 //这⾥循环⼀千次,每次循环都得实例化对象,调⽤构造与析构2 for(int i = 0; i<1000; i++)3 {4 CTest test;5 test.Out();6 }7 //下⾯同样循环⼀千次,在外部实例化对象,只调⽤⼀次构造与析构8 CTest testTwo;9 for(int j = 0; j<1000; j++)10 {11 testTwo.Out();12 }7.结构体和类使⽤, 只有当成员全部为数据时使⽤结构体,其它时⼀律使⽤类.C++中结构体和类起到同样作⽤,唯⼀区别是结构体默认成员和⽅法是public,⽽类默认是private8.操作符重载,尽量不要⽤操作符重载,定义⼀个函数来处理显得更加直观1class CPerson2 {3public:4 CPerson(int nAge):m_nAge(nAge){}5//重载==运算符6bool operator==(const CPerson &ps)7 {8if (this->m_nAge == ps.m_nAge)9 {10return true;11 }12return false;13 }14//使⽤Equal函数15bool Equal(const CPerson &ps)16 {17return this->m_nAge == ps.m_nAge;18 }19private:20int m_nAge;21 };22int _tmain(int argc, _TCHAR* argv[])23 {24 CPerson person1(20);25 CPerson person2(20);26if(person1 == person2)27 {28 printf("person1 == person2\r\n");29 }3031if(person1.Equal(person2))32 {33 printf("person1 == person2\r\n");34 }3536 getchar();37 }9.将类的数据成员私有化,提供Get Set⽅法进⾏访问, 不使⽤对象,xxxx⽅式访问好处:提⾼代码封装性,有利于调试.当数据成员出错时,只需在Get Set⽅法下断调试即可. 反之使⽤对象.xxx⽅式访问,出错时需要在所有调⽤处下断,不利于调试. 1class CPerson2 {3public:4 CPerson(int nAge):m_nAge(nAge){}5int GetAge()6 {7return this->m_nAge;8 }9void SetAge(const int nAge)10 {11this->m_nAge = nAge;12 }13private:14int m_nAge;15 };16int _tmain(int argc, _TCHAR* argv[])17 {18 CPerson person1(20);19 printf("age = %d\r\n",person1.GetAge());20 person1.SetAge(30);21 getchar();22 }10.类中的声明顺序, 先声明public块,再声明protected块,再声明private块,这三块中声明的顺序⼀致1class CPerson2 {3public:4//typedef5 typedef vector<int> VectorInt;6//常量7const int m_kNum;8//构造和析构函数9 CPerson(int nAge):m_kNum(100),m_nAge(nAge){}10 ~CPerson(){}11//成员函数12int GetAge()13 {14return this->m_nAge;15 }16void SetAge(const int nAge)17 {18this->m_nAge = nAge;19 }20//数据成员21protected:22//声明顺序同上23private:24//声明顺序同上25int m_nAge;26 };11.编写短⼩的函数,尽量不要超过40⾏好处:⽅便提取重复代码进⾏封装,便于他⼈阅读和修改,⽅便调试12.不使⽤函数重载,直接使⽤函数名进⾏区分好处:过多的函数重载种类会使调⽤者⽆从选择1//函数重载2 CPerson* GetPerson(const int nAge);3 CPerson* GetPerson(const Sex emSex);4 CPerson* GetPerson(const char* pStrName);56//直接利⽤函数名进⾏区分7 CPerson* GetPersonFromAge(const int nAge);8 CPerson* GetPersonFromSex(const Sex emSex);9 CPerson* GetPersonFromName(const char* pStrName);13.函数参数禁⽌使⽤缺省参数好处:避免他⼈调⽤函数时错误的理解14.迭代器上使⽤前置⾃增⾃减(++i --i)好处:提⾼迭代器访问的执⾏效率, 相⽐后置⾃增⾃减⽽⾔15.当函数参数为对象时,尽量使⽤指针或者引⽤⽅式传递//直接传递,需要构造⼀个新的对象,这个新的对象⼜得构造和析构,影响性能void GetPeoson(const CPerson person);//使⽤指针或引⽤⽅式传递实参,不需要构造新的对象void GetPesSon(const CPerson *pPerson);void GetPeoson(const CPerson &person);16.使⽤sizeof(变量名),⽽不是使⽤sizeof(数据类型)好处:当修改变量的数据类型后,sizeof不需要同步更新成新的数据类型17.格式要求函数中返回值与函数名在同⼀⾏,如果参数过多需要进⾏换⾏并且对齐,每⼀⾏⼀个参数1void SetWindow(HWND hWnd,2int nWidth,3int nHeight,4int nX,5int nY,6 DWORD dwStyle);if和else if语句块的括号需要另起⼀⾏,⽅便阅读1if(aa > bb)2 {3//......4 }5else if(aa > cc)6 {7//.....8 }适当添加空格,使代码美观更利于阅读1int nA, nB, nC;2 nC = nA + nB;。

编码规范C-20090603


• • •
主要内容
• 文件 --“.h”文件组织
• • • • • • • • 用户头文件名避免使用系统头文件名。 按功能组织头文件,例如独立的子系统应单独一个头文件。 与机器相关的说明组成单独的头文件。 头文件不要嵌套。 说明函数或外部变量的头文件应在定义该函数或变量的文件中引用。 不要在头文件中定义变量。 只引用需要的头文件。 每个头文件采用以下形式避免被重复引用: #ifndef EXAMPLE_H #define EXAMPLE_H ... /* body of example.h file */ #endif /* EXAMPLE_H */ 引用头文件不要使用绝对路径。使用<filename.h>引用系统头文件;使用“filename.h””引 用用户头文件,并使用C编译器的–I选项指出路径。 头文件中只存放“声明”而不存放“定义”。 不提倡使用全局变量,尽量不要在头文件中出现象extern int value 这类声明。
• • •
主要内容
• 代码--语句
• 注释块
用“注释块”描述数据结构、算法等,放在被注释的程序段前: /* * 这里是“块注释” * 这里是注释信息 * …… */

单行注释
“单行注释”放在被注释的程序段前,并与该程序段对齐: if (argc > 1) { /* 从命令行参数中得到文件名 */ if (freopen(argv[1], "r", stdin) == NULL) { perror(argv[1]); } }
主要内容
3、实例 参见编码规范
主要内容Hale Waihona Puke • 文件 --“.c”文件组织
源文件段落依下列顺序 序言 系统头文件引用(include) 用户头文件引用(include) 全局常量宏定义(define) 全局函数宏定义(define) 全局类型定义(typedef) 全局枚举类型定义(enums) 全局变量说明(extern) 全局变量说明(non-static) 全局变量说明(static) 函数 段落之间用空行分隔 文件长度尽可能在1000行之内 每行长度尽可能不超过120列
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C++_编码规范小组规范

Preparedby拟制人余裕拱Date日期2013-03-04

Reviewedby评审人Date日期

Approvedby批准人Date日期

文档编号:密级:文档名称文档修订记录日期版本说明作者2013-03-041.0创建余裕拱文档名称目录一、读者对象...........................................................................................1二、目录结构...........................................................................................1三、文件结构...........................................................................................23.1头文件#define保护..................................................................................23.2头文件依赖................................................................................................23.3包含次序....................................................................................................23.4声名次序....................................................................................................3

四、代码注释...........................................................................................4五、命名原则...........................................................................................55.1局部变量....................................................................................................55.2常量............................................................................................................55.3参数变量....................................................................................................55.4类或结构成员变量....................................................................................65.5类名............................................................................................................65.6枚举............................................................................................................65.7结构............................................................................................................65.8函数............................................................................................................75.9回调函数....................................................................................................85.10线程............................................................................................................85.11全局对象....................................................................................................85.12对称的命名..............................................................................................105.13组件命名..................................................................................................105.14UI组件命名.............................................................................................11

六、代码风格.........................................................................................11七、常用组件.........................................................................................12文档名称1/15一、读者对象有一定的C++基础,为加快日常开发和管理统一代码风格编写,这里只会提及20%的C++内容元素,本人觉得最高的效率法则就是2/8法则,就是希望只用20%最简单的C++元素,就可以实现日常开

发中80%的功能。尽量不要做无用功,提倡用最简单的代码实现最复杂的功能,不要用最复杂的代码实现最简单的功能。简单代码+清晰逻辑=复杂的构造

二、目录结构项目名/doc//项目文档项目名/bin//项目执行程序项目名/script//项目脚本项目名/include//第三方或公共组件项目名/lib//项目动态生成库项目名/release//版本发布项目名/test//测试代码项目名/tmp//项目动态生成的临时资源项目名/src//源代码项目名/src/app//执行程序项目名/src/gui//界面逻辑_引用开发工具UI组件项目名/src/bll//业务逻辑_引用标准C++项目名/src/dal//数据逻辑_引用标准C++文档名称2/15项目名/src/entity//结构实体_引用标准C++

三、文件结构.h//头文件.cpp//C++实现文件.hpp//.h与.cpp的结合,做标准公共组件用#include//格式来引用标准库和系统库的头文件。#include"file.h"//格式来引用当前工程中的头文件。

3.1头文件#define保护所有头文件都应该使用#define防止头文件被多重包含(multipleinclusion),如:#ifndefSYSTEM_BLL_H#defineSYSTEM_BLL_H...#endif

3.2头文件依赖使用前置声明(forwarddeclarations)尽量减少.h文件中#include的数量,加快编译速度。

3.3包含次序

将包含次序标准化可增强可读性、避免隐藏依赖(注:隐藏依赖主要是指包含的文件编译)文档名称3/15头文件包含次序如下:C库、C++库、其他库的.h、项目内的.h。

实现文件(如dir/foo.cpp)包含次序如下:dir2/foo2.h(优先位置,详情如下)C系统文件C++系统文件其他库头文件本项目内头文件在包含文件里不要使用.(当前目录)和..(父目录),如:#include“../abc.h”//不要这样使用

3.4声名次序在类中使用特定的声明次序:public:在private:之前,成员函数在数据成员(变量)前。定义次序如下:public:、protected:、private:,如果那一块没有,直接忽略即可。每一块中,声明次序一般如下:1)typedefs和enums;2)常量;3)构造函数;4)析构函数;5)成员函数,含静态成员函数;6)数据成员,含静态数据成员。

相关文档
最新文档