所有头文件都应该使用 #define 防止头文件被多重包含, 命名格式当是:<PROJECT>_<PATH>_<FILE>_H_
项目 SkinTK中的头文件 SkinTK/SkinTK/targetver.h 可按如下方式保护:
#ifndef SKINTK_SKINTK_TARGETVER_H_
#define SKINTK_SKINTK_TARGETVER_H_
#endif//SKINTK_SKINTK_TARGETVER_H_
2. 函数参数的顺序
定义函数时, 参数顺序依次为: 输入参数, 然后是输出参数.
3.cpp#include顺序
<1>本CPP对应的.h
<2>C系统文件
<3>C++系统文件
<4>其他库的.h文件
<5>本项目的.h文件
4.使用静态成员函数或名字空间内的非成员函数, 尽量不要用裸的全局函数.以免污染全局作用域.
5.将函数变量尽可能置于最小作用域内, 并在变量声明时进行初始化.应使用初始化的方式替代声明再赋值
6.禁止使用 class 类型的静态或全局变量: 它们会导致很难发现的 bug 和不确定的构造和析构函数调用顺序.
7.仅当只有数据时使用 struct, 其它一概使用class.
8.在类中使用特定的声明顺序: public: 在private: 之前, 成员函数在数据成员 (变量) 前;
9.类中的声明顺序:
每个区段内的声明通常按以下顺序:
- typedefs 和枚举
- 常量
- 构造函数
- 析构函数
- 成员函数, 含静态成员函数
- 数据成员, 含静态数据成员
- 声明次序: public -> protected -> private;
10.所有按引用传递的参数必须加上 const
void Foo(const string &in, string *out);
11.
函数命名, 变量命名, 文件命名应具备描述性; 不要过度缩写. 类型和变量应该是名词, 函数名可以用 “命令性” 动词.
int num_errors; // Good.
int num_completed_connections; // Good.
12.变量命名:
变量名一律小写, 单词之间用下划线连接. 类的成员变量以下划线结尾, 如:
string table_name; // OK - uses underscore.
string tablename; // OK - all lowercase.
Warning
string tableName; // Bad - mixed case.
全局变量:对全局变量没有特别要求, 少用就好, 但如果你要用, 可以用 g_ 或其它标志作为前缀, 以便更好的区分局部变量
常规函数:函数名的每个单词首字母大写, 没有下划线
取值和设值函数:取值和设值函数要与存取的变量名匹配
int num_entries()const{ returnnum_entries_;}
void set_num_entries(intnum_entries){num_entries_ =num_entries;}
13.枚举命名
单独的枚举值应该优先采用 常量 的命名方式. 但 宏 方式的命名也可以接受. 枚举名 UrlTableErrors (以及AlternateUrlTableErrors) 是类型, 所以要用大小写混合的方式.
14.常量命名:
有编译时常量, 无论是局部的, 全局的还是类中的, 和其他变量稍微区别一下. k 后接大写字母开头的单词
const int kDaysInAWeek = 7;
15.函数命名:
enum UrlTableErrors { kOK = 0, kErrorOutOfMemory, kErrorMalformedInput, };
// TODO([email protected]): Use a "*" here for concatenation operator. // TODO(Zeke) change this to use relations.