副标题#e#
1.总体法则:不要随意缩写;2.宏、列举等利用全部大写+下划线;3.变量(含类、布局体成员变量)、文件、定名空间、存取函数等利用全部小写+下划线,类成员变量以下划线末了,全局变量以g_开头;4.参考现有或临近定名约定……
定名约定
最重要的一致性法则是定名打点,定名气势气魄直接可以直接确定数名实体是:范例、变量、函数、常量、宏等等,无需查找实体声明,我们大脑中的模式匹配引擎依赖于这些定名法则。
定名法则具有必然随意性,但对比按小我私家爱好定名,一致性更重要,所以不管你怎么想,法则总归是法则。
1.通用定名法则(General Naming Rules)
函数定名、变量定名、文件定名应具有描写性,不要太过缩写,范例和变量应该是名词,函数名可以用“呼吁性”动词。
如何定名:
尽大概给出描写性名称,不要节省空间,让别人很快领略你的代码更重要,好的定名选择:
int num_errors; // Good.
int num_completed_connections; // Good.
丑恶的定名利用恍惚的缩写或随意的字符:
int n; // Bad - meaningless.
int nerr; // Bad - ambiguous abbreviation.
int n_comp_conns; // Bad - ambiguous abbreviation.
范例和变量名一般为名词:如FileOpener、num_errors。
函数名凡是是指令性的,如OpenFile()、set_num_errors(),会见函数需要描写的更细致,要与其会见的变量相吻合。
缩写:
除非放到项目外也很是明白,不然不要利用缩写,譬喻:
// Good
// These show proper names with no abbreviations.
int num_dns_connections; // Most people know what "DNS" stands for.
int price_count_reader; // OK, price count.Makes sense.// Bad!
// Abbreviations can be confusing or ambiguous outside a small group.
int wgc_connections; // Only your group knows what this stands for.
int pc_reader; // Lots of things can be abbreviated "pc".
不要用省略字母的缩写:
int error_count; // Good.int error_cnt; // Bad.
2.文件定名(File Names)
文件名要全部小写,可以包括下划线(_)或短线(-),按项目约定来。
可接管的文件定名:
my_useful_class.cc
my-useful-class.cc
myusefulclass.cc
C++文件以.cc末了,头文件以.h末了。
不要利用已经存在于/usr/include下的文件名(译者注,对UNIX、Linux等系统而言),如db.h。
凡是,只管让文件名越发明晰,http_server_logs.h就比logs.h要好,界说类时文件名一般成对呈现,如foo_bar.h和foo_bar.cc,对应类FooBar。
内联函数必需放在.h文件中,假如内联函数较量短,就直接放在.h中。假如代码较量长,可以放到以-inl.h末了的文件中。对付包括大量内联代码的类,可以有三个文件:
url_table.h // The class declaration.
url_table.cc // The class definition.
url_table-inl.h // Inline functions that include lots of code.
参考第一篇-inl.h文件一节。
#p#副标题#e#
3.范例定名(Type Names)
范例定名每个单词以大写字母开头,不包括下划线:MyExcitingClass、MyExcitingEnum。
所有范例定名——类、布局体、范例界说(typedef)、列举——利用沟通约定,譬喻:
// classes and structs
class UrlTable { ...
class UrlTableTester { ...
struct UrlTableProperties { ...
// typedefs
typedef hash_map<UrlTableProperties *, string> PropertiesMap;
// enums
enum UrlTableErrors { ...
4.变量定名(Variable Names)
变量名一律小写,单词间以下划线相连,类的成员变量以下划线末了,如my_exciting_local_variable、my_exciting_member_variable_。
普通变量定名:
举例:
string table_name; // OK – uses underscore.
string tablename; // OK – all lowercase.string tableName; // Bad – mixed case.
类数据成员:
布局体的数据成员可以和普通变量一样,不消像类那样接下划线:
struct UrlTableProperties {
string name;
int num_entries;
}
布局体与类的接头参考第三篇布局体vs.类一节。
全局变量:
对全局变量没有出格要求,罕用就好,可以以g_或其他易与局部变量区分的符号为前缀。
5.常量定名(Constant Names)
在名称前加k:kDaysInAWeek。
所有编译时常量(无论是局部的、全局的照旧类中的)和其他变量保持些许区别,k后接大写字母开头的单词:
const int kDaysInAWeek = 7;
6.函数定名(Function Names)
普通函数(regular functions,译者注,这里与会见函数等非凡函数相对)巨细写殽杂,存取函数(accessors and mutators)则要求与变量名匹配:MyExcitingFunction()、MyExcitingMethod()、my_exciting_member_variable()、set_my_exciting_member_variable()。
普通函数:
函数名以大写字母开头,每个单词首字母大写,没有下划线:
AddTableEntry()
DeleteUrl()
存取函数:
存取函数要与存取的变量名匹配,这儿摘录一个拥有实例变量num_entries_的类:
#p#分页标题#e#
class MyClass {
public:
...
int num_entries() const { return num_entries_; }
void set_num_entries(int num_entries) { num_entries_ = num_entries; }
private:
int num_entries_;
};
其他短小的内联函数名也可以利用小写字母,譬喻,在轮回中挪用这样的函数甚至都不需要缓存其值,小写定名就可以接管。
译者注:从这一点上可以看出,小写的函数名意味着可以直接内联利用。
7.定名空间(Namespace Names)
定名空间的名称是全小写的,其定名基于项目名称和目次布局:google_awesome_project。
关于定名空间的接头和如何定名,参考第二篇定名空间。
8.列举定名(Enumerator Names)
列举值应全部大写,单词间以下划线相连:MY_EXCITING_ENUM_VALUE。
列举名称属于范例,因此巨细写殽杂:UrlTableErrors。
enum UrlTableErrors {
OK = 0,
ERROR_OUT_OF_MEMORY,
ERROR_MALFORMED_INPUT,
};
9.宏定名(Macro Names)
你并不规划利用宏,对吧?假如利用,像这样:MY_MACRO_THAT_SCARES_SMALL_CHILDREN。
参考第四篇预处理惩罚宏,凡是是不利用宏的,假如绝对要用,其定名像列举定名一样全部大写、利用下划线:
#define ROUND(x) ...
#define PI_ROUNDED 3.0
MY_EXCITING_ENUM_VALUE
10.定名法则破例(Exceptions to Naming Rules)
当定名与现有C/C++实体相似的工具时,可参考现有定名约定:
bigopen()
函数名,参考open()
uint
typedef范例界说
bigpos
struct或class,参考pos
sparse_hash_map
STL相似实体;参考STL定名约定
LONGLONG_MAX
常量,雷同INT_MAX
______________________________________
译者:定名约定就相对轻松很多,在遵从代码一致性、可读性的前提下,略显随意:
1.总体法则:不要随意缩写,假如说ChangeLocalValue写作ChgLocVal尚有情可原的话,把ModifyPlayerName写作MdfPlyNm就过分度了,除函数名可适当为动词外,其他定名只管利用清晰易懂的名词;
2.宏、列举等利用全部大写+下划线;
3.变量(含类、布局体成员变量)、文件、定名空间、存取函数等利用全部小写+下划线,类成员变量以下划线末了,全局变量以g_开头;
4.普通函数、范例(含类与布局体、列举范例)、常量等利用巨细写殽杂,不含下划线;
5.参考现有或临近定名约定。