个人代码规范
为方便以后小组编程,以下代码规范为与有意愿同组同学协商调整后的规范。
-
缩进
- 缩进风格:程序块要采用缩进编写,缩进的空格数一般为4个。
if(i<0) //我们使用空格缩进. 不要在代码中使用制表符. 设置编辑器将制表符转为空格. { if(i<-1) { a++; } else{} }
-
变量命名规则
- 普通变量命名:全部使用小写,单词间使用_隔开
string table_name; // 用下划线.
- 类数据成员:全部使用小写,单词间使用_隔开,末尾以_结尾
class TableInfo { ... private: string table_name_; // 后加下划线. static Pool<TableInfo>* pool_; };
- 结构体变量:结构体数据成员和普通变量一样, 但不用像类那样接下划线
struct UrlTableProperties { string name; int num_entries; static Pool<UrlTableProperties>* pool; };
-
每行最多字符数
- 每一行代码字符数不超过 80.
- 包含长路径的
#include
语句可以超出80列.
-
函数最大行数
- 函数代码函数控制在80行以内
- 尽量紧凑。一个函数只赋予一个职责
- 不要自我重复。优先使用命名函数,而不要让相似的代码片段重复出现
-
函数、类型命名
- 常规函数使用大小写混合, 首字母大写,单词间不用隔开
- 如:
MyExcitingFunction()
,MyExcitingMethod()
- 类型名称的每个单词首字母均大写, 单词间不用隔开
class UrlTable { ... class UrlTableTester { ... struct UrlTableProperties { ... // 类型定义 typedef hash_map<UrlTableProperties *, string> PropertiesMap; // using 别名 using PropertiesMap = hash_map<UrlTableProperties *, string>; // 枚举 enum UrlTableErrors { ...
-
常量命名
- 命名时以k开头,单词首字母大写,不用分隔
- 如:
const int kDaysInAWeek = 7;
-
空行规则
- 两个函数定义之间的空行不要超过 2 行,其余地方最好不要空行
void test1() { } void test2() { }
-
注释规则
- 统一采用
//
注释,//
后空一格开始注释,注释位于上方 - 在每一个文件开头加入说明或公告
- 每个类的定义都要附带一份注释, 描述类的功能和用法, 除非它的功能相当明显
// Iterates over the contents of a GargantuanTable. // Example: // GargantuanTableIterator* iter = table->NewIterator(); // for (iter->Seek("foo"); !iter->done(); iter->Next()) { // process(iter->key(), iter->value()); // } // delete iter; class GargantuanTableIterator { ... };
- 函数声明处的注释描述函数功能; 定义处的注释描述函数实现.
- 类数据成员 (也叫实例变量或成员变量) 都应该用注释说明用途.
- 全局变量也要注释说明含义及用途, 以及作为全局变量的原因.
- 对于代码中巧妙的, 晦涩的, 有趣的, 重要的地方加以注释
- 当需要要在行尾加入注释时. 在行尾空两格进行注释
- 统一采用
-
操作符前后空格
// 赋值运算符前后总是有空格. x = 0; // 其它二元操作符也前后恒有空格. // 圆括号内部没有紧邻空格. v = w * x + y / z; v = w * (x + z); // 在参数和一元操作符之间不加空格. x = -5; ++x; if (x && !y) ...
-
其他规则
- 使用描述性的命名,少用缩写
- 文件名要全部小写, 可以包含下划线 如:
code_test.cpp
- 类的声明顺序应该为:以
public:
开始, 后跟protected:
, 最后是private:
. 省略空部分. - 多参数情况下,
,
与;
后应空一格