首页 > 技术文章 > 结对作业之代码规范

ffxpy 2018-09-16 17:35 原文

前言:

经过老师评论做出修改,相比于之前简略的代码规范,这次花时间专门了解学习了一下其他大公司/开发者的代码规范,规范更完善了一些;

代码风格:

  • 库的使用:

尽量不要引用不必要的库,包括不必要的头文件,或引用不必要的程序集。注重细节能够减少生成时间,最小化出错几率,并给读者一个良好的印象。

  • 缩进:

缩进使用4个空格的方式。

  • 全局变量:

尽量减少使用全局变量。为了正确的使用全局变量,一般是将他们作为参数传入函数。不要在函数或类内部直接引用全局变量,因为这会引起一个副作用:在调用者不知情的情况下改变了全局变量的状态。这对于静态变量同样适用。如果需要修改全局变量,应该将其作为一个输出参数,或返回其一份全局变量的拷贝。

  • 变量的声明和初始化:

在最小的,包含该局部变量的作用域块内声明它。一般若语言允许,就仅在使用前声明它们,否则就在作用域块的顶端声明,并一定在声明变量的时候初始化它们,并尽量在声明和初始化或赋值置于同一行代码内。

  • 括号:

在复杂的条件表达式中,用括号清楚的表示逻辑优先级。

  • 断行与空白的{ }行与分行:

在定义不同变量或对多个变量进行赋值时不要放在一行上,即多条语句不要放在一行上。程序结构风格使用断行和空白的{ }行,在程序调试时期需要单步执行需要断行,在程序复杂代码量大时空白{ }使结构清晰明了。每行代码限定为80字符宽,当一行装不下内容时,需要进行折行。

折行规则:

1. 在分号处折行;
2.在操作符前折行。操作符包括+,-,*,/,左括号,逗号,”&&”,”||”,问号,冒号,例外的情况是在逗号后折行;
3.当函数声明、定义、调用或 enum 声明中枚举操作符的参数列表参数较多,不能置于一行,则将每一个列表元素置于单独的一行;
  • 注释:

注释应当作为源代码的补充,而不是直译源代码。注释中应避免重复程序标识符,避免复制别处有的信息(此时可使用一个指向信息的指针)。否则程序中的任何一处改动都可能需要多处进行相应的变动。如果其他地方没有进行所需的注释改动,将会导致误注释:这种结果比根本没有注释还要糟糕。

  1. 它们应当解释不能直接从源代码看出东西;它们不应复制语言的语法或语义。
  2. 它们应当帮助读者掌握背景中的概念、依赖性、特别是复杂的数据代码和算法。
  3. 它们应当突出:与代码或设计标准的不同点、受限特性的使用、以及特殊的“技巧”。

i : 在每一函数定义代码段前,应该有一段注释,用于说明该函数的函数名,函数功能描述,输入参数描述,输出变量说明,算法描述。例:

/*
*--------------------------------------------------------------------------------
*  Member Name		     	:	成员函数名
*  Function Description		:	功能描述
*  Parameter Specification	:	输入参数描述	
*  Return Specification   	:	返回变量说明 
*   Algorithm		    	:	算法描述		
*   Addtion  			    :   附加说明,如调用说明,前置条件,后置条件。
*--------------------------------------------------------------------------------
*/

ii : 关键修改的地方应加注释说明。

/*
* Revision                  :  修改版本
* Revision Date and Time    : 修改日期与时间
* Mender                    : 修改人
* Revision Description      : 修改内容简要描述
*/
  • 命名规则:

  1. 对“匈牙利命名法”合理的简化,变量名尽量使得程序员一眼便能看出其含义,明显易懂的变量类型可以不需要在其中体现;
  2. 采取简便缩写格式,对于可以简写表示的变量不需要过多描述;
  3. 避免不必要的修饰词,如果删减修饰词程序不会变的难懂,那么便可删减;
  4. 使用下划线分隔变量名中的作用域标注和变量的语义;比如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/C++编程规范

微软编程规范

以及中央研究院C++ 编码规范的word文档

推荐阅读