`
weihe6666
  • 浏览: 430230 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Google编程风格

    博客分类:
  • C++
 
阅读更多
Google编程风格(自己整理)


1. 头文件
1. 避免多重包含是学编程时最基本的要求;
2. 前置声明是为了降低编译依赖,防止修改一个头文件引发多米诺效应;
3. 内联函数的合理使用可提高代码执行效率;
4. 标准化函数参数顺序可以提高可诺性和易维护性;
6. 将包含次序标准化可增强可读性、避免隐藏依赖;
2. 作用域
1. .c中的不具名命名空间可避免命名冲突、限定作用域,避免直接使用 using 提示符污染命名空间;
2. 嵌套类符合局部使用原则,只是不能在其他头文件中前置声明,尽量不要 public;
3. 尽量不用全局函数和全局变量,考虑作用域和命名空间限制,尽量单独形成编译单元;
4. 多线程中的全局变量(含静态成员变量)不要使用 class 类型(含 STL 容器),避免不明确行为导致的bugs。
3. C++类
1. 不在构造函数中做太多逻辑相关的初始化;
2. 编译器提供的默认构造函数不会对变量进行初始化,如果定义了其他构造函数,编译器不再提供,需要
编码者自行提供默认构造函数;
3. 为避免隐式转换,需将单参数构造函数声明为 explicit;
4. 为避免拷贝构造函数、赋值操作的滥用和编译器自动生成,可声明其为private 且无需实现;
5. 仅在作为数据集合时使用 struct;
6. 组合>实现继承>接口继承>私有继承,子类重载的虚函数也要声明 virtual 关键字;
7. 避免使用多重继承;
8. 接口类类名以 Interface 为后缀,除提供带实现的虚拟析构函数、静态成员函数外,其他均为纯虚函数,不定义非静态数据成员,不提供析构函数,提供的话,声明为 protected;
9. 为降低复杂性,尽量不重载操作符,模板、标准类中使用时提供文档说明;
10. 存取函数一般内联在头文件中;
11. 声明次序:public->protected->private;
12. 函数体尽量短小、紧凑,功能单一;
4. 命名约定
1.总体规则:不要随意缩写,如果说 ChangeLocalValue 写作 ChgLocVal 还有情可原的话,把ModifyPlayerName 写作 MdfPlyNm 就太过分了,除函数名可适当为动词外,其他命名尽量使用清晰易懂的名词;
2. 宏、枚举等使用全部大写+下划线;
3. 变量(含类、结极体成员变量)、文件、命名空间、存取函数等使用全部小写+下划线,类成员变量以下划线结尾,全局变量以 g_开头;
4. 普通函数、类型(含类与结构体、枚举类型)、常量等使用大小写混合,不含下划线;
5. 参考现有或相近命名约定;
5. 代码注释
1. 关于注释风格,很多 C++的 coders 更喜欢行注释,C coders 或许对块注释依然情有独钟,或者在文件头大段大段的注释时使用块注释;
2. 文件注释可以炫耀你的成就,也是为了捅了篓子别人可以找你;
3. 注释要言简意赅,不要拖沓冗余,复杂的东西简单化和简单的东西复杂化都是要被鄙视的; 
4. 对于 Chinese coders 来说,用英文注释还是用中文注释,it is a problem,但不管怎样,注释是为了让别人看懂,难道是为了炫耀编程语言之外的你的母语或者外语水平吗;
5. 注释不要太乱,适当的缩进才会让人乐意看,但也没有必要规定注释从第几列开始,UNIX/LINUX 下还可以约定是使用 tab 还是 space,个人倾向于space; 
6. TODO 很不错,有时候,注释确实是为了标记一些未完成的或完成的不尽如人意的地方,这样一搜索,就知道还有哪些活要干,日志都省了。
6. 格式
1. 行宽原则上不超过80列;
2. 只使用空格,每次缩进2个空格;
4. 函数参数、逻辑条件、初始化列表:要么所有参数和函数名放在同一行,要么所有参数并排分行;
5. 除函数定义的左大括号可以置于行首外,包括函数/类/结极体/枚举声明、各种语句的左大括号置于行尾,所有右大括号独立成行;
6. ./->操作符前后不留空格,*/&不要前后都留,一个就可,依各人喜好;
7. 预处理指令/命名空间不使用额外缩进,类/结极体/枚丼/函数/语句使用缩进;
8. 初始化用=还是()依个人喜好,统一就好;
9. return 不要加(); 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics