美文网首页
第4章 缩进相关编码准则

第4章 缩进相关编码准则

作者: FelixDai | 来源:发表于2019-08-02 16:11 被阅读0次

    4.1 大括号的位置

    第一种风格:大括号和语句位于同一行
    while(!END) {
        printf("continue ... ");
        continue(); }
    if(next == TRUE) {
        go_next();
        go_on(); }
    else {
        go_prev();
        go_on(); }
    

    这种风格在C语言出现早期很常见。当时,使用C语言的程序员人数少、编码经验不足、正式的C语言编码标准尚未确立,甚至连C语言编码的管理都还未形成。现在看来,按当时流行的这种风格编写的程序很难理解。因为要想知道函数或代码块从何处开始、到何处结束,就不得不留意所有语句的最右侧。

    第二种风格:大括号和语句分占不同行
    while(!END)
    {
        printf("continue ... ");
        continue();
    }
    if(next == TRUE)
    {
        go_next();
        go_on();
    }
    else
    {
        go_prev();
        go_on();
    }
    

    虽然这种方式会增加程序的长度,但大括号更能突显各代码块的起止点,所以深受程序员的喜爱,并逐渐成为一种惯例。

    第三种风格:第一种和第二种风格混合
    while(!END) {
        printf("continue ... ");
        continue();
    }
    if(next == TRUE) {
        go_next();
        go_on();
    }
    else {
        go_prev();
        go_on();
    }
    

    第三种风格兼具第一种和第二种风格的优点,既可以像第一种风格一样缩短代码长度,同时也能明确标识代码块和函数的起止点。现在,几乎所有程序员都采用这种风格编码。

    一部分程序员主张,标识函数的起始部分时采用第二种风格;而标识其他包括控制结构在内的一般代码的骑士时,采用第三种风格。

    函数和其他类型的代码块采用不同风格
    void main(void)
    {   /* <-- 包含main函数在内的所有函数的大括号独立成行 */
        // ……略……
        while(!END) {  /* <-- 其他情况下使用的大括号的左半边括号与第一条语句位于同一行 */
            printf("continue ... ");
            continue();
        }
        // ……略……
    }
    

    这种新的风格有助于区分函数和其他代码块,所以有必要重视主张这种新风格的人的意见。

    4.2 统一大括号的位置

    一般只缩进函数体,标识函数体起止位置的大括号不缩进。

    如果缩进大括号,随着函数体长度的增加,明确判断函数的结束位置会越来越难。

    4.3 内部代码块需要缩进

    标注代码块起点和终点的大括号应与函数主题语句的开始位置对齐,代码块内部语句应该比大括号的位置再缩进几个字符。如果不遵循这些原则,代码的可读性就会降低。

    4.4 输出部分需要缩进

    输出部分不缩进则容易混淆

    if (num1 == num2)
    printf("%d和%d相同。\n", num1, num2);
    

    面对这种代码,与缩进输出部分语句相比,很多程序员更倾向于在判断部分语句之后插入某些貌似被省略的语句。有些程序员会直接在判断部分所在行后添加分号,将其修改为看似更完整的语句,进而产生致命的逻辑错误。

    4.5 不要毫无意义地缩进

    4.6 保持缩进程度的一致性

    4.7 选择合适的缩进程度

    4.8 不要编写凸出形式的代码

    型如以下形式:

        if(num1 = num2) {
    num1 = 10;
    num2 = 100;
        }
    

    相关文章

      网友评论

          本文标题:第4章 缩进相关编码准则

          本文链接:https://www.haomeiwen.com/subject/rvvldctx.html