华为技术有限公司C++语言编程规范

上传人:紫*** 文档编号:132796214 上传时间:2020-05-20 格式:PDF 页数:57 大小:790.37KB
返回 下载 相关 举报
华为技术有限公司C++语言编程规范_第1页
第1页 / 共57页
华为技术有限公司C++语言编程规范_第2页
第2页 / 共57页
华为技术有限公司C++语言编程规范_第3页
第3页 / 共57页
华为技术有限公司C++语言编程规范_第4页
第4页 / 共57页
华为技术有限公司C++语言编程规范_第5页
第5页 / 共57页
点击查看更多>>
资源描述

《华为技术有限公司C++语言编程规范》由会员分享,可在线阅读,更多相关《华为技术有限公司C++语言编程规范(57页珍藏版)》请在金锄头文库上搜索。

1、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

2、xxxx xx 研发能力中心系统工程 部 郭曙光 00121837 王红超 00134169 李循律 46151 软件公司 文滔 00119601 马洪波 00164562 赵玉锡 0039301 赵祎 00108293 邓赛兵 00101270 吴鹏 69403 融合通信 张小林 58208 陈崇辉 58924 无线 张振江 64529 陶永祥 120482 中软 黄剑豪 152126 网络 张伟118807 研发能力中心 郭永生 00120218 张建保 00116237 中研 王奇 00121935 无线 苏光牛00118740 软件公司 周代兵00120359 张锦元 00160906

3、 谢峰 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

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 1C 语言特性的性能分级 41 9 2C 语言的性能优化指导 42

5、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 3Microsoft A

6、ll In One Code Framework 微软一站式示例代码库 56 14 2扩展学习材料 56 14 2 1C primer 56 14 2 2effective C more effective C 56 14 2 3Effective STL 57 14 2 4inside the C object model 57 C 语言编程规范内部公开 2012 03 19 华为机密 未经许可不得扩散第5页 共57页 C 语言编程规范 0 说明 0 1 前言 随着业务的发展和产品架构的演进 越来越多的传统电信产品使用C 语言 很多新型产品更是把C 作为首选 C 继承于 C 包含 C的所有特

7、性 同时又增加了新语言特性 如面向对象 泛型设计等 目 前C 使用现状是 基础技能薄弱 陷入很多误区 不能很好地发挥C 的作用 为了帮助团队合理使 用C 规避语言陷阱 特制定本规范 0 2 代码总体原则 跟C语言编程一样 C 编程遵循通用原则 1 清晰第一 清晰性是易于维护 易于重构的程序必需具备的特征 2 简洁为美 简洁就是易于理解并且易于实现 3 选择合适的风格 与代码原有风格保持一致 除此之外 C 编程还应该注意以下方面 1 正确使用 C 面向对象技术使得程序结构清晰 简单 提高了代码的重用性 但又隐藏了很多内部实现细节 内存 模型复杂 不小心会误入陷阱 比如 拷贝构造函数 赋值操作符

8、析构函数 重载等 为了简化代码 改善代码结构 提高编程效率 一些团队引入新特性和第三方库 如 模板技术 STL Boost 等 由于缺乏足够的理解 使用中屡次发生问题 比如对迭代器 Iterator 使用不当导致功能失 常 甚至程序崩溃 所以 必须深入理解C 对象布局 内存模型等 了解编译器背后所做的处理 才 能在编程中知道如何正确使用 2 安全高效 跟其他流行的高级语言 脚本语言相比 C 运行速度快 天然适合开发核心通信部件 但是这些部件 对稳定性的要求非常高 不容许发生异常 失效以及崩溃 C 具有直接操作硬件 访问内存的能力 提供了指针 地址运算等灵活特性 程序员可以任意发挥 增加了出错的

9、几率 所以在追求速度与灵 活性的同时 一定要注意保持程序的健壮性 在增强代码稳定性过程中 程序员通常采用if else等防 御式编程 使得代码非常臃肿 可适当采用RAII 智能指针等技术 C 语言编程规范内部公开 2012 03 19 华为机密 未经许可不得扩散第6页 共57页 0 3 与C语言编程规范的关系 本文在 华为技术有限公司C语言编程规范 简称 C规范 基础上 通过详细阐述如何规避C 语言复杂 性 避免 C 的低级错误 确保有效使用C 语言特性 代码易于维护 C规范里面相同的内容 本规范不再重复 例如头文件 变量 表达式 代码编辑与编译 可测试性 安全性 单元测试等章节经过审视 完全

10、适合C 本规范不再重复 标识符命名与定义 注释 排版 与格式等内容也适合C 仅仅添加了少量的C 特有的规则和建议 合并成风格一章 函数章节增加 了内联函数 函数参数等内容 可移植性增加了64位以及 C 专有的数据转换等内容 质量保证也符合 C 的需要 将资源分配和释放部分C 特有的内容编写成单独章节 宏 常量也符合C 考虑到 C 普遍使用 const 增加了常属性 const 章节 新增初始化和类型转换 类 作用域 模板与C 其他特性 异常与错误处理 并发 全球化等C 特 有的内容 本规范和 C规范有冲突的地方 以本规范为准 0 4 规范实施 解释 本规范制定了编写C 语言程序的基本原则 规则

11、和建议 本规范适用于公司内使用C 语言编码的所有软件 本规范自发布之日起生效 对以后新编写的和修改 的代码应遵守本规范 本规范由软件工程体系发布和维护 实施中遇到问题 可以到论坛 在某些情况下需要违反本规范给出的规则时 相关团队必须通过一个正式的流程来评审 决策规则违 反的部分 个体程序员不得违反本规范中的相关规则 0 5 术语定义 原则 编程时必须坚持的指导思想 规则 编程时强制必须遵守的约定 建议 编程时必须加以考虑的约定 说明 对此原则 规则 建议进行必要的解释 示例 对此原则 规则 建议从好 不好两个方面给出例子 延伸阅读材料 建议进一步阅读的参考材料 1 常量 不变的值更易于理解 跟

12、踪和分析 所以应该尽可能地使用常量代替变量 定义值的时候 应该把 const 作为默认的选项 规则 1 1 使用 const 常量取代宏 C 语言编程规范内部公开 2012 03 19 华为机密 未经许可不得扩散第7页 共57页 说明 宏是简单的文本替换 在预处理阶段时完成 运行报错时直接报相应的值 跟踪调试时也是显 示值 而不是宏名 宏没有类型检查 不安全 宏没有作用域 示例 define MAX MSISDN LEN 20 不好的例子 constint MAX MSISDN LEN 20 好的例子 规则 1 2 一组相关的整型常量应定义为枚举 说明 之所以使用枚举 基于 枚举比 defin

13、e 或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 位置错误 不好的例子 constint sunday

14、0 constint monday 1 constint black 0 constint 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 程序内部使

15、用 仅用于分类的情况 不应该进行显式的赋值 示例 好的例子 程序中用来标识会话状态的枚举定义 enum TSessionState SESSION STATE INIT SESSION STATE CLOSED SESSION STATE WAITING FOR RSP 应当尽量避免枚举值重复 如必须重复也要用已定义的枚举来修饰 例如 typedef enum RTCP SR 200 RTCP MIN TYPE RTCP SR must be lowest known type RTCP RR 201 C 语言编程规范内部公开 2012 03 19 华为机密 未经许可不得扩散第8页 共57页

16、RTCP SDES 202 RTCP BYE 203 RTCP APP 204 RTCP RTPFB 205 RTCP PSFB 206 RTCP XR 207 RTCP RSI 208 RTCP PUBPORTS 209 RTCP MAX TYPE RTCP PUBPORTS must be highest known type rtcp type t 规则 1 3 不相关的常量 即使取值一样 也必须分别定义 说明 一个常量只用来表示一个特定功能 即一个常量不能有多种用途 示例 好的例子 协议 A和协议 B 手机号 MSISDN 的长度都是 20 unsignedconstint A MAX MSISDN LEN 20 unsignedconstint B MAX MSISDN LEN 20 或者使用不同的名字空间 namespace alib unsignedconstint MAX MSISDN LEN 20 namespace blib unsignedconstint MAX MSISDN LEN 20 建议 1 1 尽可能使用 const 说明 在声明的变量或参数前加上关键

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号