---------------------------------------------------------------------------
★ 空行
在每个类声明之后、每个函数定义结束之后都要加空行。
在一个函数体内,逻辑上密切相关的语句之间不加空行,其它地方应加空行分隔。
---------------------------------------------------------------------------
★ 变量
1. 通则
不要节约变量的使用,也就是说,不要把同一个变量用于多种用途。尤其是指针变量。
-- 理由:这样可以防止造成混乱。如果一个变量用于多种用途,很容易到最后把自己都弄糊涂。
2. 变量定义
指针、引用类型的变量一行定义一个。
初始化的数组变量一行定义一个。
要单独注释的变量一行定义一个。
其他变量最好也一行定义一个。
3. 变量初始化
最好在变量定义时初始化,尤其是指针变量。
-- 理由:这样可以防止以后修改代码时在变量定义和初始化语句之间加代码而造成错误。
---------------------------------------------------------------------------
一行代码只写一条语句。
if, for, while, do 等语句自占一行。不论执行语句有多少都要加花括号。花括号应独占一行并且位于同一列,同时与引用它们的语句左对齐。
-- 理由:这样可以防止书写失误。
---------------------------------------------------------------------------
★ 空格
在定义指针和引用时,* 和 & 前后各留一个空格(但多级指针多个 * 之间不留空格)。在解引用和取地址时,* 和 & 与后面的标识符间不留空格。
-- 理由:突出指针和引用类型的定义,防止犯错。
二元操作符的前后应当加空格。
一元操作符如前后不加空格。
"[]", ".", "->" 前后不加空格。
if, for, while, do 等关键字之后应留一个空格再跟左括号,以突出关键字。
函数名之后不要留空格,紧跟左括号。
左括号向后紧跟,右括号、逗号、分号向前紧跟,紧跟处不留空格。
逗号之后要留空格。如果分号不是一行的结束符号(例如 for 语句中的情况),其后要留空格。
【未确定的一些做法】对于表达式比较长的 for 语句和 if 语句,紧凑起见可以按优先级先后顺序去掉一些空格,如 for (i=0; i<10; i++) 和 if ((a<=b) && (c<=d))。
---------------------------------------------------------------------------
★ 缩进
只用空格,不用制表符。
程序一级缩进四个空格。
续行缩进八个空格,再续行时逻辑深一级多缩进四个空格,依此类推。如下例所示:
if (a_very_long_name_variable_a && a_very_long_name_variable_b
&& (a_very_long_name_variable_c || a_very_long_name_variable_d))
{
}
if (a_very_long_name_variable_a && a_very_long_name_variable_b
&& (a_very_long_name_variable_c || a_very_long_name_variable_d
|| a_very_long_name_variable_e))
{
}
if (a_very_long_name_variable_a && a_very_long_name_variable_b
&& (a_very_long_name_variable_c || a_very_long_name_variable_d
|| a_very_long_name_variable_e)
&& (a_very_long_name_variable_f || a_very_long_name_variable_g))
{
}
switch 语句和 case 语句对齐(处于同一级缩进上)。
---------------------------------------------------------------------------
★ 长行拆分
代码行最大长度一般控制在 80 个字符以内。
-- 理由:代码行过长,眼睛看不过来,而且在设置了自动折行的编辑器中影响阅读,也不便于打印。
长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。
---------------------------------------------------------------------------
★ 类的版式
将 public 部分(接口函数)写在前面,而将 private 部分(私有数据)写在后面。
-- 理由:这样做不仅让自己在设计类时思路清晰,而且方便别人阅读。用户最关心的是接口!
---------------------------------------------------------------------------
★ 注释格式
行尾注释与代码之间空一格。
两行及以上的块注释格式:
/*
* 函数介绍:
* 输入参数:
* 输出参数:
* 返回值:
*/
if-else 语句注释格式:
/*
* comments of if part
*/
if (...)
{
// codes
}
/*
* comments of else part
*/
else
{
// codes
}
---------------------------------------------------------------------------
★ 注释
注释通常用于:
(1) 版本、版权声明。
(2) 函数接口说明(一般应包括函数介绍、输入参数、输出参数和返回值)。
(3) 重要的代码行或段落提示。
虽然注释有助于理解代码,但注意不可过多地使用注释。
注释是对代码的“提示”,而不是文档。程序中的注释不可喧宾夺主,注释太多了会让人眼花缭乱。注释的花样要少。
如果代码本来就是清楚的,则不必加注释。否则多此一举,令人厌烦。
边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。
注释应当准确、易懂,防止注释有二义性。错误的注释不但无益反而有害。
尽量避免在注释中使用缩写,特别是不常用缩写。
注释的位置应与被描述的代码相邻,可以放在代码的上方或右方,不可放在下方。
当代码比较长,特别是有多重嵌套时,应当在一些段落的结束处加注释,便于阅读。
---------------------------------------------------------------------------