1.常规

1.1 编辑器编码格式

utf-8

​ 因为在vscode ,sublime,notepad++等编辑器默认的编码是utf-8,绝大多程序员是不会在安装编辑器之后手动调整编码格式的,所以大多程序员就是用utf-8编码的,跟随主流,用utf-8!

1.2 缩进

1. 8字符缩进

  • 制表符是8字符缩进,所以缩进也是8字符缩进。
  • 缩进的全部意义就在于清楚的定义一个控制块起始于何处。尤其是当你盯着你的屏幕连续看了20小时之后,你将会发现这一点的缩进会使你更容易分辨缩进 。
  • 有些人会抱怨8个字符的缩进会使代码向右边移动的太远,如果你需要3级缩进以上的嵌套,你的代码就是有问题的 。 ​简而言之,8个字符的缩进可以让代码更容易阅读,还有一个好处是当你的函数嵌套太深的时候可以给你警告。留意这个警告

2. 不要使用空格缩进

3. 不要在行尾留有空格

4. switch 缩进

在switch语句中消除多级缩进的首选的方式是让switch 和从属于它的case标签对齐于同一列,而不要两次缩进 case 标签。

switch (suffix) {
    case 'G':
    case 'g':
            mem <<= 30;
            break;
    case 'M':
    case 'm':
            mem <<= 20;
            break;
    case 'K':
    case 'k':
            mem <<= 10;
            /* fail through */
    default:
            break;
}

1.3 把长的行和字符串打散

代码风格的意义就在于使用平常使用的工具来维持代码的可读性和可维护性。

  • 每一行的长度的限制是80个字符,这个是标准终端的长度,也就是可以用标准终端也可以保证代码的可读性和可维护性。我们强烈建议您遵守这个惯例。
  • 长于80列的语句要打散成有意义的片段。除非超过80列能显著增加可读性,并且不会隐藏信息。

  • 子片段要明显短于父片段,并明显靠右。这同样适用于有着很长参数列表的函数头。然而,绝对不要打散对用户可见的字符串

1.4 大括号

​ 像Kernighan和Ritchie展示给我们的,是把起始大括号放在行尾,而把结束大括号放在行首 ,能够在保证可读性的情况下减少代码行,代码行的减少给人的精神负担降低。

if (x is true) {
    we do y
}

​ 这适用于所有的非函数语句块(if,switch,for,while,do)。比如

switch (action) {
case KOBJ_ADD:
        return "add";
case KOBJ_REMOVE:
        return "remove";
case KOBJ_CHANGE:
        return "change";
default:
        return NULL;
}

不过,有一个例外,那就是函数:函数的起始大括号放置于下一行的开头,所以:

int function(int x)
{
    body of function
}

理由:函数都是特殊的(C函数是不能嵌套的)

当只有一个单独的语句的时候,不要加不必要的大括号,因为屏幕是不可再生资源。

if (condition)
    action();

if (condition)
    do_this();
else
    do_that();

1.5 空格

  • 空格使⽤⽅式(主要)取决于它是⽤于函数还是关键字
if, switch, case, for, do, while
  • 但是不要在些关键字之后放空格
sizeof,typeof
  • 当声明指针类型或者返回指针类型的函数时,* 的首选使用方式是使之靠近变量名或者函数名,而不是靠近类型
char *linux_banner;
unsigned long long memparse(char *ptr, char **retptr);
char *match_strdup(substring_t *s);
  • 在大多数二元和三元操作符两侧使用一个空格,例如下面所有这些操作符
= + - < > * / % | & ^ <= >= == != ? :
  • 但是一元操作符后不要加空格:
& * + - ~ ! sizeof typeof
  • 后缀自加和自减一元操作符前不加空格:
++ --
  • 前缀自加和自减一元操作符后不加空格:
++ --
  • . 和 -> 结构体成员操作符前后不加空格

  • 不要在行尾留空白

    当git发现补丁包含了行尾空白的时候会警告你,并且可以应你的要求去掉行尾空白;不过如果你是正在打一系列补丁,这样做会导致后面的补丁失败,因为你改变了补丁的上下文

1.6 命名

​ C是一个简朴的语言,你的命名也应该这样。和Java程序员不同C程序员不使用类似ThisVariableIsATemporaryCounter这样华丽的名字。C程序员会称那个变量为 tmp ,这样写起来会更容易,而且至少不会令其难于理解。

1.7 typedef

​ 不要使⽤类似vps_t 之类的东西。对结构体和指针使⽤typedef是一个错误

vps_t a;

这代表了什么呢?相反这样更清楚

struct virtual_container *a;

​ 很多人认为typedef能提高可读性。实际不是这样的。它们只在下列情况下有用:

​ 可能还有其他的情况,不过基本的规则是永远不要使用typedef,除非你可以明确的应用上述某个规则中的一个。

​ 总的来说,如果一个指针或者一个结构体⾥的元素可以合理的被直接访问到,那么它们就不应该是一个typedef

results matching ""

    No results matching ""