Google C++ 编程规范

C++风格指南

1 头文件

(1).h对应.cc,除main函数的.cc文件外。

(2)所有头文件必须自给自足,意思就是用户和重构工具不需要为特别场合而包含额外的文件;.c文件中只包含相应的.h为文件。

(3)用于插入文本的的文件,采用.inc结尾。

(4).h声明模板或内联函数,.cc具体定义。

(5)所有头文件都应该使用 #define 来防止头文件被多重包含, 命名格式是:

<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_

(6)尽量避免前置声明那些定义在其他项目中的实体,应使用 #include 包含需要的头文件即可。

(7)只有当函数少于 10 行时才将其定义为内联函数,内联中不包含循环和switch语句;虚函数和递归函数不用内联。

(8)#include的路径:如google-awesome-project/src/base/logging.h的头文件应该是#include "base/logging.h";

           #include的顺序:

1)本.cc文件的.h文件 (优先位置)                  需加空行

2)C 系统文件                 需加空行

3)C++ 系统文件            需加空行

4)其他库的 .h 文件                     需加空行

5)本项目内 .h 文件                     需加空行

 

2 作用域

 

3 类

3.1. 构造函数的职责

(1)不要在构造函数中进行复杂的初始化(尤其是那些有可能失败或者需要调用虚函数的初始化)。如果对象需要进行有意义的初始化,考虑使用明确的 Init() 方法或使用工厂模式。

3.2. 初始化

(2)如果类中定义了成员变量, 则必须在类中为每个类提供初始化函数或定义一个构造函数。若未声明构造函数,则编译器会生成一个默认的构造函数,这有可能导致某些成员未被初始化或被初始化为不恰当的值。

3.3. 显式构造函数

(3)对单个参数的构造函数使用 C++ 关键字 explicit。

 

 

 

【6】C++命名约定


参考文献:http://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/contents/

https://download.csdn.net/download/qccz123456/10567851

6.1  通用命名规则

使用描述性词语命名、且写词语全称

int price_count_reader;

6.2  文件命名

文件名全小写,且尽量使用“_”下划线连接字符。

http_server_logs.h

6.3  类型命名

所有类型名(类class、结构体struct、类型定义 typedef、枚举enum)的每个单词首字母均大写,不包含下划线。

class UrlTable{ ...

struct UrlTableProperties {...

typedef hash_map<UrlTableProperties*, string>  PropertiesMap;

enum UrlTableErrors{ ...

6.4  变量命名

(1)变量名全小写,使用“_”下划线连接;

(2)类的所有成员变量以“_”下划线结尾,但结构体不需要下划线;

(3)全局变量尽量少使用,需要“g_”作为前缀。

string table_name;

class TableInfo{

private:

        string table_name_;

};

struct UrlTableProperties{

        int num_entries;

}

int g_keyboard_value;

6.5  常量命名

常量名前加“k”,且其余单词首字母均大写

const int kDaysInAWeek =7;

6.6  函数命名

函数名的每个单词首字母均大写,且没有下划线。

但,取值和 设值 函数要与存取的变量名相一致。

AddTableEntry();

class MyClass{

public:

       int get_num() const { return num_;}

       void set_num(int num) { num_ = num; }

private:

       int num_;

};

6.7.名字空间命名

名字空间用小写字母命名,“_”下划线隔开,并基于项目名称和目录结构。

6.8.枚举命名

枚举名优先采用常量 命名,其次是  。

enum UrlTableErrors{

       kOK= 0,

       kErrorOutOfMemory= 1,

};

enumAlternateUrlTableErrors {

       OUT_OF_MEMORY= 1,

       MALFORMED_INPUT= 2,

};

6.9.宏命名

通常不应该使用宏,如使用则全大写,单词间下划线隔开。

#define PI_ROUNDED 3.0

6.10.命名规则的特例

如果你命名的实体与已有 C/C++ 实体相似,可参考现有命名策略。

 

 

7C++注释


参考文献:http://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styleguide/comments/

注释固然很重要,但最好的代码本身应该是自文档化。有意义的类型名和变量名,要远胜过要用注释解释的含糊不清的名字。

7.1 注释风格

使用 // 或 /* */, 统一就好.

7.2. 文件注释

法律公告和作者信息:版权声明、许可证、作者;

文件内容:.h 文件简单说明类的功能和用法,.cc 文件说明实现细节或算法技巧。

(比如, Copyright 2008 Google Inc.)

 (比如, Apache 2.0, BSD, LGPL, GPL)

7.3. 类注释

描述类的功能和用法。

7.4. 函数注释

函数声明处注释描述函数功能; 定义处描述函数实现.

7.5. 变量注释

通常变量名本身足以很好说明变量用途. 某些情况下, 也需要额外的注释说明.

7.6. 实现注释

对于代码中巧妙的, 晦涩的, 有趣的, 重要的地方加以注释.

7.7. 标点, 拼写和语法

注意标点, 拼写和语法; 写的好的注释比差的要易读的多.

7.9. 弃用注释

通过弃用注释(DEPRECATED comments)以标记某接口点(interface points)已弃用。

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值