公司成立不久,暂时没有完备的项目编码规范。自己现在的工作也基本上是独立完成,没有团队合作。所以这里的命名约定作为自己的“单兵装备”,尽量约束自己写出风格统一、清晰易读的代码。本约定几乎完全参考“Google C++ Style”,部分参考“QT”。
所采用的命名风格可以直接确定命名实体是:类型、变量、函数、常量、宏等等,而无需查找实体声明。
(1)通用命名规则
1. 尽可能不使用缩写,即便是那些显而易见的缩写(如:num -> number)。
2. 类型和变量名一般为名词,如:FileOpener、number_errors。
3. 函数名通常是指令性的,如OpenFile()。
(2)文件命名
1. 文件名全部小写,以下划线(_)作为分隔符,如:my_userful_class.cpp。
2. 尽量让文件名更加明确,如:http_server_logs.h比logs.h要好。
(3)类型命名(包含类、结构体、类型定义(typedef)、枚举)
每个单词以大写字母开头,不包含下划线,如:MyClass。
(4)变量命名
1. 所有单词小写,以下划线(_)做分隔符,类的成员变量以下划线结尾。如:my_local_variable、my_member_variable_。
2. 结构体的数据成员和普通变量一样,不用以下划线(_)结尾。
3. 全局变量以g_为前缀。
(5)常量命名
以k为前缀,后接大写字母开头的单词,无下划线分隔。如:const int kDaysInAWeek = 7;
(6)函数命名
1. 普通函数以大写字母开头,每个单词首字母大写,无下划线分隔。如:AddTableEntry()、DeleteUrl()。
2. 存取函数要与存取的变量名匹配,如:
class MyClass
{
public:
...
int get_num_entries() const { return num_entries_; }
void set_num_entries(int num_entries) { num_entries_ = num_entries; }
private:
int num_entries_;
};
3. 短小的内联函数名也可以使用小写字母。(从这一点上可以看出,小写的函数名意味着可以直接内联使用。)
4. 关于布尔属性的设置函数和提取函数参考规则(9)。
(7)枚举值命名
1. 枚举值全部大写,以下划线(_)做分隔符,如:MY_ENUM_VALUE。
2. 枚举名称属于类型,参考规则(3)。
3. 每个枚举值里,至少重复一个枚举类型名中的元素。如:
enum CaseSensitivity
{
CaseInsensitive,
CaseSensitive
};
(8)宏命名
所有单词全部大写,使用下划线(_)分隔。如:#define PI_ROUNDED 3.0。
(9)布尔属性的设置函数(Setter)和提取函数(Getter)命名
1. 形容类的属性加Is前缀,如:IsChecked()、IsEmpty()、IsEnable()。
2. 应用到复数名词的形容类属性不加Is前缀,如:ScrollBarsEnabled()而不是AreScrollBarsEnabled()
3. 动词类的属性不使用前缀,且不使用第三人称(-s),如:AcceptDrops()而不是AcceptsDrops()。
4. 前3条针对提取函数,对于设置函数也使用相同的规则,只不过前缀换做是Set。
(10)选择指针作为传出[out]型参数
如:
void GetHsv(int *h, int *s, int *v);
color.GetHsv(&h, &s, &v);
大部分C++书籍推荐使用引用,因为一般认为引用比指针更“安全且好用”。但这里决定使用指针,因为这更能清楚的说明,在函数调用后,h、s和v将有很大几率被改动。
(11)全面抛弃“匈牙利命名法”