排版与格式

规则 9.1 程序块采用缩进风格编写,每级缩进为 4 个空格。

当前各种编辑器/IDE 都支持 TAB 键自动转空格输入,需要打开相关功能并设置相关功能。

编辑器/IDE 如果有显示 TAB 的功能也应该打开,方便及时纠正输入错误。

IDE 向导生成的代码可以不用修改。

宏定义、编译开关、条件预处理语句可以顶格(或使用自定义的排版方案,但产品/模块内必须保持一致)。

规则 9.2 相对独立的程序块之间、变量说明之后必须加空行。

示例:如下例子不符合规范。

if (!valid_ni(ni))
{
 // program code
 ...
}
repssn_ind = ssn_data[index].repssn_index;
repssn_ni = ssn_data[index].ni;

应如下书写

if (!valid_ni(ni))
{
 // program code
 ...
}

repssn_ind = ssn_data[index].repssn_index;
repssn_ni = ssn_data[index].ni;

规则 9.3 一条语句不能过长,如不能拆分需要分行写。一行到底多少字符换行比较合适,产品可以自行确定。

对于目前大多数的 PC 来说,132 比较合适(80/132 是 VTY 常见的行宽值);对于新 PC 宽屏显示器较多的产品来说,可以设置更大的值。

换行时有如下建议:

换行时要增加一级缩进,使代码可读性更好; 低优先级操作符处划分新行;换行时操作符应该也放下来,放在新行首; 换行时建议一个完整的语句放在一行,不要根据字符数断行 示例:

if ((temp_flag_var == TEST_FLAG)
 &&(((temp_counter_var - TEST_COUNT_BEGIN) % TEST_COUNT_MODULE) >= TEST_COUNT_THRESHOLD))
{
 // process code
}

规则 9.4 多个短语句(包括赋值语句)不允许写在同一行内,即一行只写一条语句。

示例:

int a = 5; int b= 10; //不好的排版
//较好的排版:
int a = 5;
int b = 10;

规则 9.5 if、for、do、while、case、switch、default 等语句独占一行。

执行语句必须用缩进风格写,属于 if、for、do、while、case、switch、default 等下一个缩进级别;

一般写 if、for、do、while 等语句都会有成对出现的„{}‟,对此有如下建议可以参考:

if、for、do、while 等语句后的执行语句建议增加成对的„{}‟;

如果 if/else 配套语句中有一个分支有„{}‟,那么令一个分支即使一行代码也建议增加„{}‟;

添加„{‟的位置可以在 if 等语句后,也可以独立占下一行;独立占下一行时,可以和 if 在一个缩进级别,也可以在下一个缩进级别;但是如果 if 语句很长,或者已经有换行,建议„{‟使用独占一行的写法。

规则 9.6 在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格;进行非对等操作时,如果是关系密切的立即操作符(如->),后不应加空格。

采用这种松散方式编写代码的目的是使代码更加清晰。

在已经非常清晰的语句中没有必要再留空格,如括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为在 C 语言中括号已经是最清晰的标志了。

在长语句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部不加空格。给操作符留空格时不要连续留两个以上空格。

示例: (1) 逗号、分号只在后面加空格

int a, b, c;

(2) 比较操作符, 赋值操作符"="、 "+=",算术操作符"+"、"%",逻辑操作符"&&"、"&",位域操作符 "<<"、"^"等双目操作符的前后加空格。

if (current_time >= MAX_TIME_VALUE)
a = b + c;
a *= 2;
a = b ^ 2;

(3) "!"、"~"、"++"、"--"、"&"(地址操作符)等单目操作符前后不加空格。

*p = 'a'; // 内容操作"*"与内容之间
flag = !is_empty; // 非操作"!"与内容之间
p = &mem; // 地址操作"&" 与内容之间
i++; // "++","--"与内容之间

(4) "->"、"."前后不加空格。

p->id = pid; // "->"指针前后不加空格

(5) if、for、while、switch 等与后面的括号间应加空格,使 if 等关键字更为突出、明显。

 if (a >= b && c > d)

建议 9.1 注释符(包括„/‟„//‟„/‟)与注释内容之间要用一个空格进行分隔。

现在很多工具都可以批量生成、删除'//'注释,这样有空格也比较方便统一处理。

建议 9.2 源程序中关系较为紧密的代码应尽可能相邻。