Shawn Zhou's Code Style for project & ACM-ICPC

这篇文章主要介绍我个人在编写代码时的代码规范。截止到本文成文之前,我的代码一直没有一个定型的风格,就像人写字没有固定的字体一样,有时候自己拿出自己以前写的代码来看都会感到略微别扭。于是制定本规范以约束自己。

该规范来自于本人长期的积累和各类语言教学书籍。其中文章结构参考于_rqy的代码规范一文。
本规范中没有特殊指明的地方默认在工程代码与ACM题目代码中共同遵守。

该规范会在之后继续补充。


概述

#include语句应当置于整个程序的开头部分。

(ACM)允许使用using namespace语句。

(工程代码)是否使用using namespace语句视实际情况而定。

禁止使用int类型代替bool类型。

禁止对函数先定义后说明,在定义时要说明函数的构造。

预编译

(ACM)应当避免使用.h后缀的头文件,当使用C标准库的头文件时应当使用c前缀。

所有的预编译指令都不可以缩进。

缩进

对每个代码块使用等长于四个空格的Tab缩进,不允许使用四个空格代替。

行、换行与空行

禁止左花括号换行。

所有的#include 与using sample::text;之间不允许空行,之后应空一行。

(ACM)意义相关的全局变量应放在同一块区域中,块与块之间应该空一行。

不允许出现两个以上的空行。

不同的函数之间应该用一个空行隔开。

语句之间是否空行根据实际情况而定。

除for循环中的三个语句和简短的case后面的语句+break;语句外,每行只允许有一个语句。

应尽量避免一行内求值多个表达式的情况,如的确需要,使用等价的逗号表达式代替。

空格

在左花括号前面必须加一个空格。

除,(逗号)外的二元运算符的两侧必须各加一个空格。

,(逗号)与非行末;(分号)的右侧必须加一个空格。

if、while、do-while里面的while语句后面必须加一个空格。

三目运算符的两个符号的两侧必须加一个空格。

类型中*与&的左侧(如:int &a, int *A)。

单目运算符的两侧不可以有空格。

对于多层嵌套的圆括号或者方括号,可以适当地在连续两个括号之间加空格。

operator与所要重载的运算符之间应加一个空格。

即便是很短的函数也不应该写到一行里。

函数与变量

main()函数的类型必须是int,最后必须要有return 0;

空函数体遵循上文的花括号写法,函数体内只有一个回车。

(工程代码)建议多使用函数封装各个功能。

(工程代码)传参时应该根据实际情况进行引用,const引用或者值传递。

(ACM)为方便起见,传参时尽量使用值传递。

(ACM)应该尽量少用局部变量。如不可避免的使用,应做到随开随用。

只在一个函数内使用到的需要全局空间(如大数组)或生命周期的变量,必须定义为 static 的局部变量。

命名规则与注释

对于工程代码:

所有结构体、函数、变量、参数名必须使用驼峰命名法,对首字母的大小写不做要求。

严禁使用单个字母或者过短的单词缩写进行命名,但是循环变量除外。

在必要处应当添加注释。

对于ACM代码:

在自己能明白大意的情况下对命名不做硬性要求。

在必要处应当添加注释。


-------------本文结束,感谢您的阅读转载请注明原作者及出处-------------

知识无价,码字不易。对您有用,敬请打赏。金额随意,感谢关心。