热搜关键词: 电路基础ADC数字信号处理封装库PLC

pdf

C++编程规范

  • 1星
  • 2015-05-12
  • 515.52KB
  • 需要1积分
  • 2次下载
标签: C

C

编程规范

编程规范

C++编程规范  新人入职必备

Google C++
编程规范
目½
一、头文件
.........................................................................................................................................
4
1. #define
的保护
.......................................................................................................................
4
2.
头文件依赖
..........................................................................................................................
4
3.
内联½数
..............................................................................................................................
5
4. -inl.h
文件
..........................................................................................................................
5
Function
5.
½数参数顺序(Function
Parameter Ordering
............................................
5
Ordering)
6.
包含文件的名称及次序
......................................................................................................
6
二、½用域
.........................................................................................................................................
7
Namespaces
1.
½名空间(Namespaces
..........................................................................................
7
Namespaces)
Nested Class)
2.
嵌套类(Nested
Class
.............................................................................................
9
Nonmember
Static Member)和全局½
3.
非成员½数(Nonmember
Nonmember)、静态成员½数(Static Member
Global Functions)
数(Global
Functions
...................................................................................................
9
Local Variables)
4.
局部变量(Local
Variables
..................................................................................
10
Global Variables)
5.
全局变量(Global
Variables
...............................................................................
10
三、类
...............................................................................................................................................
11
Constructor
1.
构造½数(Constructor
Constructor)的职责
..............................................................................
11
Default Constructors)
2.
默认构造½数(Default
Constructors
.............................................................
12
Explicit Constructors)
3.
明确的构造½数(Explicit
Constructors
.........................................................
12
4.
拷贝构造½数(Copy
Constructors
...................................................................
13
Copy Constructors)
Structs
5.
结构½和类(Structs
vs. Classes
......................................................................
14
Classes)
Inheritance
6.
继承(Inheritance
..................................................................................................
14
Inheritance)
Multiple Inheritance)
7.
多重继承(Multiple
Inheritance
......................................................................
15
Interface
8.
接口(Interface
.......................................................................................................
15
Interface)
9.
操½符重½½(Operator
Overloading
...............................................................
16
Operator Overloading)
Access Control)
10.
存取控制(Access
Control
................................................................................
16
Declaration Order)
11.
声明次序(Declaration
Order
.........................................................................
17
Write
12.
编写短小½数(Write
Short Functions
........................................................
17
Functions)
Google
四、Google 特有的风情
.................................................................................................................
18
Smart Pointers)
1.
智½指针(Smart
Pointers
..................................................................................
18
五、其他
C++
C++特性.
.........................................................................................................................
19
1.
引用参数(Reference
Arguments
...................................................................
19
Reference Arguments)
Function Overloading)
2.
½数重½½(Function
Overloading
....................................................................
19
Default Arguments)
3.
缺省参数(Default
Arguments
.........................................................................
20
4.
变长数组和
alloca Variable-Length Arrays and alloca()
................
20
alloca(Variable-Length
alloca())
Friends
5.
友元(Friends
............................................................................................................
20
Friends)
6.
异常(Exceptions
....................................................................................................
20
Exceptions
Exceptions)
Run-Time
7.
运行时类型识别(Run-Time
Type Information, RTTI
...........................
22
RTTI)
Casting
8.
类型½换(Casting
...................................................................................................
22
Casting)
Streams
9.
流(Streams
..............................................................................................................
23
Streams)
Preincrement
10.
前½自增和自减(Preincrement
and Predecrement
............................
24
Predecrement)
Use
11. const
的½用(Use
of const
.............................................................................
24
const)
Integer Types)
12.
整型(Integer
Types
..........................................................................................
25
64-bit Portability)
13. 64
½下的可移植性(64-bit
Portability
........................................................
26
14.
预处理宏(Preprocessor
Macros
..................................................................
27
Preprocessor Macros)
15. 0
NULL 0 and NULL
....................................................................................
27
NULL(0
NULL)
16. sizeof sizeof
........................................................................................................
28
sizeof(sizeof
sizeof)
Boost
17. Boost
库(Boost
...................................................................................................
28
Boost)
六、½名约定
...................................................................................................................................
29
General
1.
通用½名规则(General
Naming Rules
..........................................................
29
Rules)
File Names)
2.
文件½名(File
Names
...........................................................................................
30
3.
类型½名(Type
Names
.........................................................................................
31
Type Names)
Variable Names)
4.
变量½名(Variable
Names
.................................................................................
31
Constant Names)
5.
常量½名(Constant
Names
...............................................................................
31
Function Names)
6.
½数½名(Function
Names
................................................................................
32
Namespace Names)
7.
½名空间(Namespace
Names
.........................................................................
32
8.
枚举½名(Enumerator
Names
.........................................................................
32
Enumerator Names)
Macro Names)
9.
宏½名(Macro
Names
..........................................................................................
33
Exceptions
10.
½名规则例外(Exceptions
to Naming Rules
..........................................
33
Rules)
七、注释
...........................................................................................................................................
34
Comment Style)
1.
注释风格(Comment
Style
..................................................................................
34
File Comments)
2.
文件注释(File
Comments
...................................................................................
34
Class Comments)
3.
类注释(Class
Comments
...................................................................................
34
4.
½数注释(Function
Comments
.......................................................................
35
Function Comments)
Variable Comments)
5.
变量注释(Variable
Comments
........................................................................
36
Implementation Comments)
6.
实现注释(Implementation
Comments
......................................................
37
Punctuation,
7.
标点、拼写和语法(Punctuation,
Spelling and Grammar
...................
38
Grammar)
TODO Comments)
8. TODO
注释(TODO
Comments
.........................................................................
38
八、格式
...........................................................................................................................................
39
Line Length)
1.
行长度(Line
Length
..............................................................................................
39
Non-ASCII Characters)
2.
非 ASCII 字符(Non-ASCII
Characters
..........................................................
40
Spaces
3.
空格还是制表½(Spaces
vs. Tabs
....................................................................
40
Tabs)
Function
4.
½数声明与定义(Function
Declarations and Definitions
...................
40
Definitions)
Function Calls)
5.
½数调用(Function
Calls
....................................................................................
42
Conditionals
6.
条件语句(Conditionals
........................................................................................
43
Conditionals)
7.
循环和开关选择语句(Loops
and Switch Statements
.............................
44
Loops
Statements)
Pointers
8.
指针和引用表达式(Pointers
and Reference Expressions
...................
45
Expressions)
Boolean Expressions)
9.
布尔表达式(Boolean
Expressions
.................................................................
46
Return Values)
10.
½数返回值(Return
Values
.............................................................................
46
Variable
11.
变量及数组初始化(Variable
and Array Initialization
........................
46
Initialization)
12.
预处理指令(Preprocessor
Directives
.......................................................
46
Preprocessor Directives)
Class Format)
13.
类格式(Class
Format
........................................................................................
47
Initializer Lists)
14.
初始化列表(Initializer
Lists
...........................................................................
48
Namespace Formatting)
15.
½名空间格式化(Namespace
Formatting
.................................................
48
Horizontal Whitespace)
16.
水平留½(Horizontal
Whitespace
..............................................................
49
Vertical Whitespace)
17.
垂直留½(Vertical
Whitespace
....................................................................
50
九、规则之例外
...............................................................................................................................
52
Existing
1.
现有不统一代码(Existing
Non-conformant Code
...................................
52
Code)
2. Windows
代码(Windows
Code
......................................................................
52
Windows Code)
十、团队合½
...................................................................................................................................
53
一、头文件
通常,每一个.cc 文件(C++的源文件)½有一个对应的.h 文件(头文件),也有一些例
外,如单元测试代码和只包含
main()的.cc
文件。
正确½用头文件可令代码在可读性、文件大小和性½上大为改观。
下面的规则将引导½规避½用头文件时的各种麻烦。
1. #define
的保护
所有头文件½应该½用#define 防止头文件被多重包含(multiple
inclusion),½名格式
½是:<PROJECT>_<PATH>_<FILE>_H_
为保证唯一性,头文件的½名应基于其所在项目源代码树的全路径。例如,项目 foo 中的头
文件 foo/src/bar/baz.h 按如下方式保护:
#ifndef FOO_BAR_BAZ_H_
#define FOO_BAR_BAZ_H_
...
#endif // FOO_BAR_BAZ_H_
2.
头文件依赖
½用前½声明(forward
declarations)½量减少.h
文件中#include 的数量。
½一个头文件被包含的同时也引入了一项新的依
dependency),
只要该头文件被修改 ,
代码就要重新编译。
如果½的头文件包含了其他头文件,
这些头文件的任½改变也将导致那
些包含了½的头文件的代码重新编译。因此,我们宁可½量少包含头文件,尤其是那些包含
在其他头文件中的。
½用前½声明可以显著减少需要包含的头文件数量。举例说明:头文件中用到类
File,½不
需要访问
File
的声明,则头文件中只需前½声明 class File;无需#include
"file/base/file.h"。
在头文件如½做到½用类
Foo
而无需访问类的定义?
1)
将数据成员类型声明为
Foo *或 Foo &;
2)
参数、返回值类型为
Foo
的½数只是声明(½不定义实现);
3)
静态数据成员的类型可以被声明为
Foo,因为静态数据成员的定义在类定义之外。
另一方面,如果½的类是
Foo
的子类,或者含有类型为
Foo
的非静态数据成员,则必须为
之包含头文件。
有时,
½用指针成员
(pointer
members,
如果是 scoped_ptr 更½)
替代 对象 成员
(object
members)的确更有意义。然而,这样的做法会降½代码可读性及执行效率。如果仅仅为
了少包含头文件,还是不要这样替代的½。
½然,.cc 文件无论如½½需要所½用类的定义部分,自然也就会包含若干头文件。
译者注:½依赖声明的就不要依赖定义。
3.
内联½数
只有½½数只有
10
行甚至更少时才会将其定义为内联½数(inline
function)。
Definition
定义(Definition
Definition):½½数被声明为内联½数之后,编译器可½会将其内联展开,无需
按通常的½数调用机制调用内联½数。
优点:½½数½比较小的时候,内联该½数可以令目标代码更加高效。对于存取½数
(accessor、mutator)以及其他一些比较短的关键执行½数。
缺点:滥用内联将导致程序变慢,内联有可½是目标代码量或增或减,这取决于被内联的½
数的大小。内联较短小的存取½数通常会减少代码量,½内联一个很大的½数(译者注:如
果编译器允许的话)将戏剧性的增加代码量。在现代处理器上,由于更½的利用指令缓存
(instruction
cache),小巧的代码往往执行更快。
结 论:
一个比较得½的处理规则是,
不要内联超过
10
行的½数。
对于析构½数应慎重对待 ,
析构½数往往比其表面看起来要长,因为有一些隐式成员和基类析构½数(如果有的话)被
调用!
另一有用的处理规则:内联那些包含循环或
switch
语句的½数是得不偿失的,除非在大多
数情况下,这些循环或
switch
语句从不执行。
重要的是,虚½数和递½½数即½被声明为内联的也不一定就是内联½数。通常,递½½数
不应该被声明为内联的(译者注:递½调用堆栈的展开并不像循环那么简单,比如递½层数
在编译时可½是未知的,大多数编译器½不支持内联递½½数)。析构½数内联的主要原因
是其定义在类的定义中,为了方便抑或是对其行为给出文档。
4. -inl.h
文件
复杂的内联½数的定义,应放在后缀名为-inl.h 的头文件中。
在头文件中给出内联½数的定义,可令编译器将其在调用处内联展开。然而,实现代码应完
全放到.cc 文件中,我们不希望.h 文件中出现太多实现代码,除非这样做在可读性和效率上
有明显优势。
如果内联½数的定义比较短小、逻辑比较简单,其实现代码可以放在.h 文件中。例如,存
取½数的实现理所½然½放在类定义中。
出于实现和调用的方便,
较复杂的内联½数也可以
放到.h 文件中,如果½觉得这样会½头文件显得笨重,还可以将其分离到单独的-inl.h 中。
这样即把实现和类定义分离开来,½需要时包含实现所在的-inl.h 即可。
-inl.h
文件还可用于½数模板的定义,从而½得模板定义可读性增强。
要提醒的一点是,-inl.h 和其他头文件一样,也需要#define 保护。
5.
½数参数顺序(
Function Parameter Ordering
½数参数顺序(Function
Ordering)
定义½数时,参数顺序为:输入参数在前,输出参数在后。
展开预览

猜您喜欢

评论

登录/注册

意见反馈

求资源

回顶部

推荐内容

热门活动

热门器件

随便看看

  • 美国国家半导体为高压功率转换系统提供电源管理解决方案
    美国国家半导体为高压功率转换系统提供电源管理解决方案 由于新一代的产品不断推陈出新,对功率转换的要求也越来越严格,美国国家半导体于是推出这系列全新的高压电源管理产品,以满足各大厂商客户这方面的要求。LM5000 系列芯片是一个功能齐备的电源管理系统解决方案,不但稳定可靠、性能卓越,而且极具成本效益,最适合系统设计工程师用来开发新一代的系统。由于 LM5000 系列芯片获得客户的高度评价,因此我们有
  • PMSM3.1
    PMSM3.1
  • PSoC 4 ARM Cortex-M0开发板免费拿
    [align=center]PSoC 4 ARM Cortex-M0开发板免费拿活动不仅在我们论坛上进行,在其他论坛上也在进行,看来赛普拉斯下血本了。[/align]
  • 中小单位IT升级的绝好机遇
    毕业以后,在一家小企业上班,日子过的平平淡淡,开始把真实的自己藏在一张带着虚伪笑容的面具下面,谈不上厌倦,就是麻木了,早已经没有了当年的热血,我相信不只是我,从这个城市的灯红酒绿间穿过的每个人,都是这样的一具行尸走肉……日子已经开始比白开水还要淡…挤地铁,打卡,在陪伴了我好几年的旧电脑前坐一天,打卡,挤地铁,回家……我坚信日子似乎会这样一成不变的过下去……直到有一天,挤地铁的时候,突然看见旁边一哥
  • 射频识别系统模型
    射频识别系统模型 射频识别系统工作过程中,空间传输通道中发生的过程可归结为三种事件模型,本文以此三种事件模型的描述来介绍射频识别系统的典型工作方式与工作流程。 射频标签(射频标签)与阅读器(读写器)之间通过两者的天线架起空间电磁波传输的通道。细分射频标签与阅读器之间的电磁耦合,包含两种情况:即近距离的电感耦合与远距离的电磁耦合。在电感耦合方式中,阅读器一方的天线相当于变压器的初级线圈,射频标签一方
  • 请高手指点无线供电的电路图的错误
  • [求助]有没有关于特权APIs的例子?
  • 汽车变速器的基本知识
  • 发个洞洞板布线的小工具
  • 晶体振荡器选择时该注意什么?

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
×