前言:
经过老师评论做出修改,相比于之前简略的代码规范,这次花时间专门了解学习了一下其他大公司/开发者的代码规范,规范更完善了一些;
代码风格:
库的使用:
尽量不要引用不必要的库,包括不必要的头文件,或引用不必要的程序集。注重细节能够减少生成时间,最小化出错几率,并给读者一个良好的印象。
缩进:
缩进使用4个空格的方式。
全局变量:
尽量减少使用全局变量。为了正确的使用全局变量,一般是将他们作为参数传入函数。不要在函数或类内部直接引用全局变量,因为这会引起一个副作用:在调用者不知情的情况下改变了全局变量的状态。这对于静态变量同样适用。如果需要修改全局变量,应该将其作为一个输出参数,或返回其一份全局变量的拷贝。
变量的声明和初始化:
在最小的,包含该局部变量的作用域块内声明它。一般若语言允许,就仅在使用前声明它们,否则就在作用域块的顶端声明,并一定在声明变量的时候初始化它们,并尽量在声明和初始化或赋值置于同一行代码内。
括号:
在复杂的条件表达式中,用括号清楚的表示逻辑优先级。
断行与空白的{ }行与分行:
在定义不同变量或对多个变量进行赋值时不要放在一行上,即多条语句不要放在一行上。程序结构风格使用断行和空白的{ }行,在程序调试时期需要单步执行需要断行,在程序复杂代码量大时空白{ }使结构清晰明了。每行代码限定为80字符宽,当一行装不下内容时,需要进行折行。
折行规则:
1. 在分号处折行;
2.在操作符前折行。操作符包括+,-,*,/,左括号,逗号,”&&”,”||”,问号,冒号,例外的情况是在逗号后折行;
3.当函数声明、定义、调用或 enum 声明中枚举操作符的参数列表参数较多,不能置于一行,则将每一个列表元素置于单独的一行;
注释:
注释应当作为源代码的补充,而不是直译源代码。注释中应避免重复程序标识符,避免复制别处有的信息(此时可使用一个指向信息的指针)。否则程序中的任何一处改动都可能需要多处进行相应的变动。如果其他地方没有进行所需的注释改动,将会导致误注释:这种结果比根本没有注释还要糟糕。
- 它们应当解释不能直接从源代码看出东西;它们不应复制语言的语法或语义。
- 它们应当帮助读者掌握背景中的概念、依赖性、特别是复杂的数据代码和算法。
- 它们应当突出:与代码或设计标准的不同点、受限特性的使用、以及特殊的“技巧”。
i : 在每一函数定义代码段前,应该有一段注释,用于说明该函数的函数名,函数功能描述,输入参数描述,输出变量说明,算法描述。例:
/*
*--------------------------------------------------------------------------------
* Member Name : 成员函数名
* Function Description : 功能描述
* Parameter Specification : 输入参数描述
* Return Specification : 返回变量说明
* Algorithm : 算法描述
* Addtion : 附加说明,如调用说明,前置条件,后置条件。
*--------------------------------------------------------------------------------
*/
ii : 关键修改的地方应加注释说明。
/*
* Revision : 修改版本
* Revision Date and Time : 修改日期与时间
* Mender : 修改人
* Revision Description : 修改内容简要描述
*/
命名规则:
- 对“匈牙利命名法”合理的简化,变量名尽量使得程序员一眼便能看出其含义,明显易懂的变量类型可以不需要在其中体现;
- 采取简便缩写格式,对于可以简写表示的变量不需要过多描述;
- 避免不必要的修饰词,如果删减修饰词程序不会变的难懂,那么便可删减;
- 使用下划线分隔变量名中的作用域标注和变量的语义;比如Word_Count;
-
i : 所有的类型/类/函数名都用Pascal形式:所 有单词的第一个字母都大写;
- ii : 所有变量使用Camel形式,第一个单词全部小写,随后单词随Pascal形式;
- iii : 常量全用大写的字母,用下划线分割单词。
- iv : 静态变量加前缀s_(表示static)。
v : 如果不得已需要全局变量,则使全局变量加前缀g_(表示global)。
示例代码:
class Node; // 类名
class LeafNode; // 类名
void Draw(void); // 函数名
void SetValue(int value); // 函数名
BOOL flag;
int drawMode;
const int MAX = 100;
const int MAX_LENGTH = 100;
void Init(…)
{
static int s_initValue; // 静态变量
…
}
int g_howManyPeople; // 全局变量
int g_howMuchMoney; // 全局变量
参考文章:
以及中央研究院C++ 编码规范的word文档;