《Google C++编码规范》读书笔记第六章:命名约定

《Google C++编码规范》第六章:命名约定

一.通用命名约定(General Naming Rules)

函数命名,变量命名,文件命名应该就有描述性,不要过度缩写,类型和变量应该是名词,函数可以用“命令性”动词。
对于缩写,只有当放到项目外仍然非常明确,否则不要使用缩写:

int num_dns_connections;//dns是大部分人都明白的

也不要省略字母的缩写:

int error_count;    //good
int error_cnt;  //bad

二.文件命名(File Names)

文件名要全部小写,可以包含短线-或下划线_,按照项目约定来。可接受的命名:

my_useful_class.cc;
my-useful-class.cc;
myusefulclass.cc;

C++源文件以.cc结尾,头文件以.h结尾。对于Linux/Unix等系统而言,不要使用已经存在于/user/include下的文件名。
通常,尽量让文件名明确,http_server_logs.h就比logs.h要好,定义类时,头文件和源文件应该成对出现,例如:foo_bar.hfoo_bar.cc,对应类FooBar
如果内联函数比较短,(定义?)可以直接放在.h中,如果代码较长,放在-inl.h中,例如:

url_table.h     //声明
url_table.cc    //定义
url_table-inl.h //内联函数含有较多的代码的定义

三.类型命名(Type Names)

类型命名每个单词都以大写字母开头,不包含下划线:MyExctingClass
所有类型命名,包括类、结构体、类型定义(typedef)和枚举,使用上述相同的规则:

class UrlTable{};
typedef hash_map<UrlTable*, string> UrlTableMap;
enum UrlTableErrors {};

四.变量命名(Variable Names)

变量名一律小写,单词间以下划线相连,类的成员变量以下划线结尾

string table_name;  //good
string tableName;   //bad
class UrlTables {
    string first_url_;  //good
    string second_url;  //bad
};  

结构体的数据变量和普通变量一样,可以不以下划线结尾。
全局变量:少用,用的时候可以用g_作为前缀来与局部变量区分。

五.常量命名(Constant Names)

所有常量命名:k接大写字母开头的单词,如:

const int kDaysInWeek = 7;

六.函数命名(Function Names)

普通函数以大写字母开头,每个单词的首字母大写,没有下划线:

DeleteUrl();
AddTableEntry();

存取函数要与存取的变量名匹配:

class MyClass {
public:
    int num_entries() const { return num_entries_; }
    int set_num_entries(int num_entris) {
        num_entris_ = num_entris;
    }
private:
    int num_entries_;
}

其它短小的内联函数也可以使用小写字母。

扫描二维码关注公众号,回复: 2617703 查看本文章

七.命名空间(Namespace Names)

命名空间的名称时全部小写,命名基于项目名称和目录结构:google_awesome_project

八.枚举命名(Enumerator Names)

枚举值应该全部大写,单词间以下划线相连:MY_EXCITING_ENUM_VALUE
枚举名称属于类型,因此大小写混用:

enum UrlTableErrors {
    OK = 0,
    ERROR_OUT_OF_MEMORY,
    ERROR_MALFORMED_INPUT,
};

九.宏命名(Macro Names)

通常是不使用宏的,一定要使用,命名要想枚举一样全部大写:

#define ROUND(x) ...
#define PI_ROUND 3.0

十.命名规则例外(Exception to Naming Rules)

当命名与C++实体相似的对象时,可参考现有的命名:

bigopen();  //函数名,参考open()
uint    //typedef 类型定义
bigpos  //struct 或class,参考pos
sparse_hash_map //STL 相似实体;参考STL 命名约定
LONGLONG_MAX    //常量,类似INT_MAX

主要参考自《Google C++编码规范》中文版

猜你喜欢

转载自blog.csdn.net/qq_25467397/article/details/80890942