好文档就是一把金锄头!
欢迎来到金锄头文库! [登录][注册]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

华为技术有限公司c++语言编程规范.pdf

57页
  • 卖家[上传人]:第***
  • 文档编号:55140756
  • 上传时间:2018-09-25
  • 文档格式:PDF
  • 文档大小:1.28MB
  • 文本预览
  • 下载提示
  • 常见问题
    • C++语言编程规范 内部公开 2012-03-19 华为机密,未经许可不得扩散 第1页,共57页 华为技术有限公司内部技术规范 DKBA 2979-2012.03 C++语言编程规范 2012年03月15日发布 2012年03月15日实施 华为技术有限公司 Huawei Technologies Co., Ltd. 版权所有 侵权必究 C++语言编程规范 内部公开 2012-03-19 华为机密,未经许可不得扩散 第2页,共57页 修订声明 本规范拟制与解释部门:本规范拟制与解释部门: 本规范的相关系列规范或文件: 相关国际规范或文件一致性: 替代或作废的其它规范或文件: 相关规范或文件的相互关系: 规范号规范号 主要起草部门专家主要起草部门专家 主要评审部门专家主要评审部门专家 修订情况修订情况 DKBAxxxx.x-xxxx.xx 研发能力中心系统工程部: 郭曙光00121837 王红超00134169 李循律46151 软件公司: 文滔00119601 马洪波00164562 赵玉锡0039301 赵祎00108293 邓赛兵00101270 吴鹏69403 融合通信: 张小林58208 陈崇辉58924 无线: 张振江64529 陶永祥120482 中软: 黄剑豪152126 网络: 张 伟118807 研发能力中心: 郭永生00120218 张建保00116237 中研: 王奇00121935 无线:苏光牛00118740 软件公司:周代兵00120359 张锦元00160906 谢峰00150451 张振国00039875 陈春美41639 邓春平00036632 胡小翔00160924 李玉华39860 网络: 王玎00168059 刘宏业00121368 艾小平52519 融合通信: 董志凌46134 苏昆00145871 潘会民48511 成研所: 李朝阳00117623 海思: 孙学全00148680 IT: 戴强51135 相关国际规范或文件一致性:C++语言编程规范 内部公开 2012-03-19 华为机密,未经许可不得扩散 第3页,共57页 目 录 0 说明 5 0.1 前言 5 0.2 代码总体原则 . 5 0.3 与C语言编程规范的关系 6 0.4 规范实施、解释 6 0.5 术语定义 . 6 1 常量 6 2 初始化和类型转换 8 2.1 声明、定义与初始化 8 2.2 类型转换 . 10 3 函数 . 12 3.1 内联函数 . 12 3.2 函数参数 . 13 3.3 函数指针 . 14 4 类 . 14 4.1 类的设计 . 14 4.2 构造、赋值和析构 17 4.3 继承 21 4.4 重载 24 5 作用域、模板和C++其他特性 25 5.1 作用域 25 5.2 模板 27 5.3 其他 28 6 资源分配和释放 . 28 7 异常与错误处理 . 33 7.1 异常 33 7.2 错误处理策略 . 35 8 标准库 . 36 9 程序效率 . 41 9.1 C++语言特性的性能分级 41 9.2 C++语言的性能优化指导 42 C++语言编程规范 内部公开 2012-03-19 华为机密,未经许可不得扩散 第4页,共57页 10 并发 . 45 11 风格 . 48 11.1 标示符命名与定义 48 11.2 排版 48 11.3 注释 49 11.4 文件组织 . 49 12 可移植性(兼容性) . 49 13 全球化 . 52 13.1 多语言输入输出 52 13.2 单一版本 . 53 13.3 时区夏令时 . 54 14 业界编程规范和书籍 . 55 14.1 业界编程规范 . 55 14.1.1 《google C++ code style》 (google C++编程指南) . 55 14.1.2 《C++编程规范101条规则、准则与最佳实践》 . 56 14.1.3 Microsoft All-In-One Code Framework《微软一站式示例代码库》 . 56 14.2 扩展学习材料 . 56 14.2.1 C++ primer 56 14.2.2 effective C++ / more effective C++ . 56 14.2.3 Effective STL . 57 14.2.4 inside the C++ object model . 57 C++语言编程规范 内部公开 2012-03-19 华为机密,未经许可不得扩散 第5页,共57页 C++语言编程语言编程规范规范 0 0 说明说明 0.1 前言 随着业务的发展和产品架构的演进,越来越多的传统电信产品使用C++语言,很多新型产品更是把C++作为首选。

      C++继承于C,包含C的所有特性,同时又增加了新语言特性,如面向对象、泛型设计等目前C++使用现状是:基础技能薄弱,陷入很多误区,不能很好地发挥C++的作用为了帮助团队合理使用C++,规避语言陷阱,特制定本规范 0.2 代码总体原则 跟C语言编程一样,C++编程遵循通用原则: 1、清晰第一清晰性是易于维护、易于重构的程序必需具备的特征 2、简洁为美简洁就是易于理解并且易于实现 3、选择合适的风格,与代码原有风格保持一致 除此之外,C++编程还应该注意以下方面: 1、正确使用C++ 面向对象技术使得程序结构清晰、简单,提高了代码的重用性,但又隐藏了很多内部实现细节,内存模型复杂,不小心会误入陷阱,比如:拷贝构造函数,赋值操作符,析构函数,重载等 为了简化代码,改善代码结构,提高编程效率,一些团队引入新特性和第三方库,如:模板技术、STL、Boost等,由于缺乏足够的理解,使用中屡次发生问题,比如对迭代器(Iterator)使用不当导致功能失常,甚至程序崩溃所以,必须深入理解C++对象布局、内存模型等,了解编译器背后所做的处理,才能在编程中知道如何正确使用 2、安全高效 跟其他流行的高级语言、脚本语言相比,C++运行速度快,天然适合开发核心通信部件,但是这些部件对稳定性的要求非常高,不容许发生异常、失效以及崩溃。

      C++具有直接操作硬件、访问内存的能力,提供了指针、地址运算等灵活特性,程序员可以任意发挥,增加了出错的几率所以在追求速度与灵活性的同时,一定要注意保持程序的健壮性在增强代码稳定性过程中,程序员通常采用if-else等防御式编程,使得代码非常臃肿,可适当采用RAII、智能指针等技术 C++语言编程规范 内部公开 2012-03-19 华为机密,未经许可不得扩散 第6页,共57页 0.3 与C语言编程规范的关系 本文在《华为技术有限公司C语言编程规范》(简称C规范)基础上,通过详细阐述如何规避C++语言复杂性,避免C++的低级错误,确保有效使用C++语言特性,代码易于维护 C规范里面相同的内容,本规范不再重复例如头文件、变量、表达式、代码编辑与编译、可测试性、安全性、单元测试等章节经过审视,完全适合C++,本规范不再重复标识符命名与定义、注释、排版与格式等内容也适合C++,仅仅添加了少量的C++特有的规则和建议,合并成风格一章;函数章节增加了内联函数、函数参数等内容;可移植性增加了64位以及C++专有的数据转换等内容;质量保证也符合C++的需要,将资源分配和释放部分C++特有的内容编写成单独章节;宏、常量也符合C++,考虑到C++普遍使用const,增加了常属性(const)章节。

      新增初始化和类型转换,类,作用域、模板与C++其他特性,异常与错误处理,并发,全球化等C++特有的内容 本规范和C规范有冲突的地方,以本规范为准 0.4 规范实施、解释 本规范制定了编写C++语言程序的基本原则、规则和建议 本规范适用于公司内使用C++语言编码的所有软件本规范自发布之日起生效, 对以后新编写的和修改的代码应遵守本规范 本规范由软件工程体系发布和维护实施中遇到问题,可以到论坛 在某些情况下需要违反本规范给出的规则时,相关团队必须通过一个正式的流程来评审、决策规则违反的部分,个体程序员不得违反本规范中的相关规则 0.5 术语定义 原则原则:编程时必须坚持的指导思想 规则规则:编程时强制必须遵守的约定 建议建议:编程时必须加以考虑的约定 说明说明:对此原则/规则/建议进行必要的解释 示例示例:对此原则/规则/建议从好、不好两个方面给出例子 延伸阅读材料延伸阅读材料:建议进一步阅读的参考材料 1 1 常常量量 不变的值更易于理解、 跟踪和分析, 所以应该尽可能地使用常量代替变量, 定义值的时候, 应该把const作为默认的选项 规则规则1.1 1.1 使用使用constconst常量取代宏常量取代宏 C++语言编程规范 内部公开 2012-03-19 华为机密,未经许可不得扩散 第7页,共57页 说明:宏是简单的文本替换,在预处理阶段时完成,运行报错时直接报相应的值;跟踪调试时也是显示值,而不是宏名;宏没有类型检查,不安全;宏没有作用域。

      示例: #define MAX_MSISDN_LEN (20) //不好的例子 const int MAX_MSISDN_LEN = 20; //好的例子 规则规则1.2 1.2 一组相关的一组相关的整型整型常量应定义为枚举常量应定义为枚举 说明:之所以使用枚举,基于:  枚举比#define或const int更安全,因为编译器会检查参数值是否是否位于枚举取值范围内,从而避免错误发生 示例: //好的例子: enum DayOfWeek{sunday,monday, tuesday, wednesday, thursday, friday, saturday}; enum Color{black, blue, white, red, purple}; BOOL ColorizeCalendar(DayOfWeek today, Color todaysColor); ColorizeCalendar(blue, sunday); //编译报错,Blue和Sunday位置错误 //不好的例子: const int sunday = 0; const int monday = 1; const int black = 0; const int blue = 1; BOOL ColorizeCalendar(int today, int todaysColor); ColorizeCalendar(blue, sunday); //不会报错  当枚举值需要对应到具体数值时,须在声明时显示赋值。

      否则不需要显式赋值,以避免重复赋值,降低维护(增加、删除成员)工作量 示例: //好的例子:S协议里定义的设备ID值,用于标识设备类型 enum TDeviceType { DEV_UNKNOWN = -1, DEV_DSMP = 0, DEV_ISMG = 1, DEV_WAPPORTAL = 2 }; 程序内部使用,仅用于分类的情况,不应该进行显式的赋值 示例: //好的例子:程序中用来标识会话状态的枚举定义 enum TSessionState { SESSION_STATE_INIT, SESSION_STATE_CLOSED, SESSION_STATE_WAITING_FOR_RSP };  应当尽量避免枚举值重复,如必须重复也要用已定义的枚举来修饰,例如: typedef enum { RTCP_SR = 200, RTCP_MIN_TYPE = RTCP_SR, //m。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.