C语言最佳实践
上QQ阅读APP看书,第一时间看更新

1.4.2 空格、大括号位置及缩进

适当添加空格、不滥用空格,对提高代码的可读性和维护代码的整洁性具有很大的帮助。这方面的最佳实践便是采纳Linux内核编码风格的相关规定。

(1)单目运算符和++--运算符的前后不加空格,例如像下面这样的写法是正确的:

int *p = (int *)&a;
p++;
--a;

像下面这样的写法是不正确的:

a ++;
++ p;

(2)函数名称,包括可按函数方式调用的关键字(如sizeof)和宏的后面,不要加空格,例如像下面这样的写法是正确的:

call_me(sizeof(int), MAX(x, y));

其中,参数列表中的逗号之后应该添加空格。

像下面这样的写法是不正确的:

call_me (sizeof (int),MAX (x,y));

(3)不要在行尾添加空格。这一点很重要,但很容易被忽视,因为行尾的空格在视觉上是看不出来的。为此,可以修改编辑器的设置,显示行尾的空白字符,比如将行尾的空格显示为灰色的句点。

(4)双目运算符或多目运算符的前后,以及关键字(如ifelsefor)的后面一般需要添加空格,例如:

if (a && b) {
}

但也有一些例外,比如双目的成员访问操作符(.->)的前后不需要添加空格,例如:

temp->next = NULL;

除空格之外,有关大括号的位置,还有一个建议是遵循Linux内核编码风格的相关规定。相较于其他编码风格,Linux内核编码风格的相关规定最为简洁。但究竟是使用制表符还是使用空格进行缩进,以及缩进宽度是4个空格还是8个空格,则由读者自行决定。在实践中,相较于将if、while等语句后的左大括号({)单独一行书写,笔者更喜欢将其置于行尾,如下所示:

int lots_of_args(int x, long y, short z, double a_double, float a_float)
{
    int haha = 0;
 
    if (x < foo(y, z)) {
        haha = bar[4] + 5;
    }
    else {      /* 笔者不太喜欢 } else { 这种写法 */
        while (z) {
            haha += foo(z, z);
            z--;
        }
 
        haha = ++x + bar();
    }
 
    return haha;
}