当前各种编辑器/IDE 都支持 TAB 键自动转空格输入,需要打开相关功能并设置相关功能。
编辑器/IDE 如果有显示 TAB 的功能也应该打开,方便及时纠正输入错误。
IDE 向导生成的代码可以不用修改。
宏定义、编译开关、条件预处理语句可以顶格(或使用自定义的排版方案,但产品/模块内必须保持一致)。
示例:如下例子不符合规范。
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;
对于目前大多数的 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
}
示例:
int a = 5; int b= 10; //不好的排版
//较好的排版:
int a = 5;
int b = 10;
执行语句必须用缩进风格写,属于 if、for、do、while、case、switch、default 等下一个缩进级别;
一般写 if、for、do、while 等语句都会有成对出现的„{}‟,对此有如下建议可以参考:
if、for、do、while 等语句后的执行语句建议增加成对的„{}‟;
如果 if/else 配套语句中有一个分支有„{}‟,那么令一个分支即使一行代码也建议增加„{}‟;
添加„{‟的位置可以在 if 等语句后,也可以独立占下一行;独立占下一行时,可以和 if 在一个缩进级别,也可以在下一个缩进级别;但是如果 if 语句很长,或者已经有换行,建议„{‟使用独占一行的写法。
采用这种松散方式编写代码的目的是使代码更加清晰。
在已经非常清晰的语句中没有必要再留空格,如括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为在 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)
现在很多工具都可以批量生成、删除'//'注释,这样有空格也比较方便统一处理。