- 1、本文档共40页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
IM C++编码规范
元信息
作者&维护者:董剑飞( 发邮件给我)
目前状态:已发布
本规范是以百度C++编码规范为基础,原作者为ibase的陈晓鸣同学,经IM组RD共同讨论一致确定,作为IM组同学编写代码和审查代码的依据。
规则集[RULES]
【语法】
[RULE]struct表示数据的简单集合,公开定义数据成员,一般不定义方法。
[RULE]class表示被封装的用户自定义类型,不公开定义非静态数据成员,一般通过成员方法进行交互。
[RULE]若类定义了虚函数,必须定义虚析构函数
[RULE]如果类(不包括结构)含有指针成员,必须显式给出析构函数,并小心指定其行为(是否销毁指针,如何销毁等)
[RULE]绝不允许让异常离开析构函数。
[RULE]公开继承的类,必须表示“是一个”的关系,禁止仅仅因为可以复用某些方法而使用继承
[RULE]派生类不允许覆盖基类中的非虚函数
[RULE]若函数调用了返回错误码的函数,必须检查其返回值。
[RULE]错误码原则上以0表示成功,其它非0值表示错误。
[RULE]禁止错误码与返回值混用。
[RULE]若要取得变量的大小,必须使用sizeof()关键字,不能自己估算,也不能使用预定义宏和常量
[RULE]禁止使用goto向上跳转
[RULE]如果必须编写宏函数,并且宏函数有多行的话,必须使用do{ ... }while(0)块包围。
[RULE]如果必须编写宏函数,宏参数必须使用小括号包围。
[RULE]禁止全局变量、静态变量之间存在依赖关系。
[RULE]使用enum或const定义常量,不使用define定义常量。
[RULE]可能用于跨模块间通讯或者涉及存储的枚举值必须显式指定值,避免版本不一致造成诡异的错误。
[RULE]禁止使用魔术数字,必须替换为符号常量
【风格】
[RULE]必须按以下顺序引用头文件:C(标准)库,C++(标准)库,其它库,自己的项目。
[RULE]头文件必须使用include guards保护。
[RULE]一条单独的语句必须独立成行
[RULE]使用空格缩进,不使用制表符
[RULE]以4个空格为单位缩进
[RULE]if语句的分支部分必须使用大括号包围。
[RULE]switch语句的每一个case语句都必须以break语句或return语句结束。
[RULE]switch如果使用分组,每组除最后一个case之外不允许有任何代码。
[RULE]循环语句的循环体必须使用大括号包围。
[RULE]头文件必须使用.h后缀,C++源代码必须使用.cpp后缀,纯C源代码必须使用.c后缀
[RULE]使用下划线分隔的全小写命名法命名命名空间
[RULE] 函数命名使用下划线分隔的全小写命名法
[RULE]用户自定义类型、结构体与枚举类型使用下划线分隔的全小写命名法命名,并加上"_t"后缀
[RULE]尽可能不使用全局变量,如果必须使用,必须以g为前缀,而且必须足够长以避免名字冲突
[RULE]全局变量使用下划线分格的全小写命名法命名
[RULE]局部变量名使用下划线分隔的全小写命名法命名
[RULE]const常量与枚举常量都使用下划线分隔的全大写命名法命名
[RULE]尽可能不定义宏,如果必须,使用下划线分隔的全大写命名法,并且必须足够长,以库名为前缀,使人们不至误用,并尽可能减少冲突(如MY_LIB_MY_MACRO_THAT_SCARES_SMALL_CHILDREN)
[RULE]注释建议使用中文书写,并一律使用GBK编码。如果使用英文,请确保简明易懂,且没有语法及拼写错误。
[RULE]多行注释必须写在被解释内容的上方。单行注释可以写在被注释语句的上文或右方
[RULE]一行内只应声明一个变量
【库的使用】
[RULE]禁止使用auto_ptr智能指针。
[RULE]禁止使用strcpy()/strcat()/strdup()/sprintf()等没有越界检查的函数。
[RULE]禁止使用strncpy等实现有问题的函数。
第一部分 语法
本节主要规定和建议IM工程师使用/不使用某些C++语法,从而提高代码质量、可读性、可维护性。
总体原则
规定
工程师应该尽可能提高对C++语法的全面理解
在非必要的情况下尽可能避免使用罕用的、“高级”的C++语法
解释
写C++程序的第一条原则,不要写C++程序。第二条原则,不要写C++程序,除非你对C++语法与使用方法有足够的了解
C++是一门语法复杂,功能强大的语言。熟练使用C++的能力并非一朝一夕的努力即可获得。因此,应当不断地学习、提高驾驭这门语言的能力。
在编写C++程序时应遵守KISS
文档评论(0)