软件编码规范文档
C++C++ 设设计计编编码码规规范范 (( 试试 用用 版版 )) 设备开发部设备开发部 黄焕斌黄焕斌 目录 1 重要提示 错误错误! !未定义书签。未定义书签。 背景错错误误! !未定义书签。未定义书签。 文件组织规则 错误错误! !未定义书签。未定义书签。 命名错错误误! !未定义书签。未定义书签。 目录错错误误! !未定义书签。未定义书签。 预处理错误错误! !未定义书签。未定义书签。 注释错错误误! !未定义书签。未定义书签。 代码组织规则 错误错误! !未定义书签。未定义书签。 空行错错误误! !未定义书签。未定义书签。 换行错错误误! !未定义书签。未定义书签。 空格错错误误! !未定义书签。未定义书签。 对齐错错误误! !未定义书签。未定义书签。 就近原则 错误错误! !未定义书签。未定义书签。 精简原则 错误错误! !未定义书签。未定义书签。 命名规则 错误错误! !未定义书签。未定义书签。 自注释错误错误! !未定义书签。未定义书签。 变量错错误误! !未定义书签。未定义书签。 函数错错误误! !未定义书签。未定义书签。 类型错错误误! !未定义书签。未定义书签。 宏错误错误! !未定义书签。未定义书签。 常量错错误误! !未定义书签。未定义书签。 设计规则 错误错误! !未定义书签。未定义书签。 识别类和函数 错误错误! !未定义书签。未定义书签。 构造函数 错误错误! !未定义书签。未定义书签。 封装性错误错误! !未定义书签。未定义书签。 函数参数 错误错误! !未定义书签。未定义书签。 函数返回值错误错误! !未定义书签。未定义书签。 契约错错误误! !未定义书签。未定义书签。 规模错错误误! !未定义书签。未定义书签。 名字空间 错误错误! !未定义书签。未定义书签。 类型转换 错误错误! !未定义书签。未定义书签。 常量错错误误! !未定义书签。未定义书签。 内联错错误误! !未定义书签。未定义书签。 静态变量 错误错误! !未定义书签。未定义书签。 编译依赖 错误错误! !未定义书签。未定义书签。 可重入错误错误! !未定义书签。未定义书签。 内存管理规则 错误错误! !未定义书签。未定义书签。 模块化错误错误! !未定义书签。未定义书签。 静态分配 错误错误! !未定义书签。未定义书签。 new/delete错误错误! !未定义书签。未定义书签。 有效性错误错误! !未定义书签。未定义书签。 2 3 4 5 6 正确释放 错误错误! !未定义书签。未定义书签。 拷贝错错误误! !未定义书签。未定义书签。 注释规则 错误错误! !未定义书签。未定义书签。 有效性错误错误! !未定义书签。未定义书签。 普通注释 错误错误! !未定义书签。未定义书签。 Doxygen 注释 错误错误! !未定义书签。未定义书签。 定义错错误误! !未定义书签。未定义书签。 申明错错误误! !未定义书签。未定义书签。 模块错错误误! !未定义书签。未定义书签。 维护规则 错误错误! !未定义书签。未定义书签。 消除警告 错误错误! !未定义书签。未定义书签。 代码修改 错误错误! !未定义书签。未定义书签。 标本兼治 错误错误! !未定义书签。未定义书签。 7 参考资料 错误错误! !未定义书签。未定义书签。 重要提示 本规范中的示例代码都在表格框中显示,绿色的表格框表示正确的示例代码,红色的表格框 表示不建议的示例代码。 背景 C++是大华设备软件和平台软件开发的主要软件,在新的软件框架里,两种平台的组件甚至 是共用的。统一的代码风格,良好的设计风格,有利于代码的实现和阅读,有利于减少代码错误 和提高代码效率,能有效地促进技术的交流和发展。 常见的代码规范都异常冗长,调调框框太多。本规范力求以简明的内容,概括一些重要的规 则,将相似的规则进行提炼集中描述,并提供对照的示例代码加深理解。规范的使用者花半个小 时左右,就可以熟悉整个规范。 所有大华基于新软件框架的底层组件,业务组件,应用组件都必须遵守此规范。 例外 本规范是强制要求,不过有些情况例外: 与第三方库有关的代码:比如 stl,boost,json 等等,使用、移植这些库时,相关的代码可以按照这 些库的规范。 Windows 代码: 主要指基于公共软件框架,同时使用了非公共组件框架内的其他 API 接口的组件, 可以继续保留 Windows 的规范。 文件组织规则 命名 所有的目录和文件名使用大写字母开头的单词组合,目录名单词之间可以用空格分开。 引用文件名时要严格区分大小写。 与操作系统关系密切的工程的命名可以参考操作系统的规则。 . #endif ize() = 1 } 空格 ‘,’之后要留空格。 如果‘;’不是一行的结束符号,其后要留空格。 二目或三目操作符前后留空格。 但“[]”、“.”、“-”这类操作符和作用于分辨符“::”前后不加空格。 修饰符‘*’和‘&’紧靠变量名,仅在前面加空格。 char *name; int *x, y; 定义 对于类,结构,联合,枚举,函数,宏,自定义类型,名字空间,非局部变量等定义均需要使用 Doxygen 简要注释。 对于类,结构,联合,枚举等成员使用右置的 Doxygen 简要注释。 如果变量是用来作为某种标志而不是连续的数值,还应说明每种取值的意义。 申明 对于全局函数或者类的公有函数的申明,或者直接在类定义中实现的公有函数,应使用\brief \param \return \retval \note \sa 等命令进行注释,命令内容为空的可以省略,可使用 va 模板。 对其他申明可以不加注释。 模块 将相同用途的定义或申明进分组成模块,比如 API 集等等。 使用\defgroup (title) @{ @}.定义一个新的组,name 只能是单个词。 使用\addtogroup [(title)]@{ @}.加入已有组。 使用\ingroup ( [ ])将所注释的对象加入已有组。 .]The Pragmatic Programmer - From journeyman to master [Google]