高質(zhì)量C++/C編程指南(三)

字號(hào):

第 2 章 程序的版式
    版式雖然不會(huì)影響程序的功能,但會(huì)影響可讀性。程序的版式追求清晰、美觀,是程序風(fēng)格的重要構(gòu)成因素。
    可以把程序的版式比喻為“書法”。好的“書法”可讓人對(duì)程序一目了然,看得興致勃勃。差的程序“書法”如螃蟹爬行,讓人看得索然無(wú)味,更令維護(hù)者煩惱有加。請(qǐng)程序員們學(xué)習(xí)程序的“書法”,彌補(bǔ)大學(xué)計(jì)算機(jī)教育的漏洞,實(shí)在很有必要。
    2.1 空行
    空行起著分隔程序段落的作用??招械皿w(不過(guò)多也不過(guò)少)將使程序的布局更加清晰??招胁粫?huì)浪費(fèi)內(nèi)存,雖然打印含有空行的程序是會(huì)多消耗一些紙張,但是值得。所以不要舍不得用空行。
    l 【規(guī)則 2-1-1 】 在每個(gè)類聲明之后、每個(gè)函數(shù)定義結(jié)束之后都要加空行。參見示例 2-1 ( a )
    l 【規(guī)則 2-1-2 】 在一個(gè)函數(shù)體內(nèi),邏揖上密切相關(guān)的語(yǔ)句之間不加空行,其它地方應(yīng)加空行分隔。參見示例 2-1 ( b )
    // 空行
    void Function1(…)
    {
    …
    }
    // 空行
    void Function2(…)
    {
    …
    }
    // 空行
    void Function3(…)
    {
    …
    }
     // 空行
    while (condition)
    {
    statement1;
    // 空行
    if (condition)
    {
    statement2;
    }
    else
    {
    statement3;
    }
    // 空行
    statement4;
    }
    示例 2-1(a) 函數(shù)之間的空行 示例2-1(b) 函數(shù)內(nèi)部的空行
    2.2 代碼行
    l 【規(guī)則 2-2-1 】 一行代碼只做一件事情,如只定義一個(gè)變量,或只寫一條語(yǔ)句。這樣的代碼容易閱讀,并且方便于寫注釋。
    l 【規(guī)則 2-2-2 】 if 、 for 、 while 、 do 等語(yǔ)句自占一行,執(zhí)行語(yǔ)句不得緊跟其后。不論執(zhí)行語(yǔ)句有多少都要加 {} 。這樣可以防止書寫失誤。
    示例 2-2 ( a )為風(fēng)格良好的代碼行,示例 2-2 ( b )為風(fēng)格不良的代碼行。
    int width; // 寬度
    int height; // 高度
    int depth; // 深度
     int width, height, depth; // 寬度高度深度
    x = a + b;
    y = c + d;
    z = e + f;
     X = a + b; y = c + d; z = e + f;
    if (width < height)
    {
    dosomething();
    }
     if (width < height) dosomething();
    for (initialization; condition; update)
    {
    dosomething();
    }
    // 空行
    other();
     for (initialization; condition; update)
    dosomething();
    other();
    示例 2-2(a) 風(fēng)格良好 的代碼行 示例2-2(b) 風(fēng)格不良 的代碼行
    2 【建議 2-2-1 】 盡可能在定義變量的同時(shí)初始化該變量(就近原則)
    如果變量的引用處和其定義處相隔比較遠(yuǎn),變量的初始化很容易被忘記。如果引用了未被初始化的變量,可能會(huì)導(dǎo)致程序錯(cuò)誤。本建議可以減少隱患。例如
    int width = 10; // 定義并初紿化width
    int height = 10; // 定義并初紿化height
    int depth = 10; // 定義并初紿化depth
    2.3 代碼行內(nèi)的空格
    l 【規(guī)則 2-3-1 】 關(guān)鍵字之后要留空格。象 const 、 virtual 、 inline 、 case 等關(guān)鍵字之后至少要留一個(gè)空格,否則無(wú)法辨析關(guān)鍵字。象 if 、 for 、 while 等關(guān)鍵字之后應(yīng)留一個(gè)空格再跟左括號(hào)‘(',以突出關(guān)鍵字。
    l 【規(guī)則 2-3-2 】 函數(shù)名之后不要留空格,緊跟左括號(hào)‘(',以與關(guān)鍵字區(qū)別。
    l 【規(guī)則 2-3-3 】 ‘('向后緊跟,‘)'、‘,'、‘ ; '向前緊跟,緊跟處不留空格。
    l 【規(guī)則 2-3-4 】 ‘,'之后要留空格,如 Function(x, y, z) 。如果‘ ; '不是一行的結(jié)束符號(hào),其后要留空格,如 for (initialization; condition; update) 。
    l 【規(guī)則 2-3-5 】 賦值操作符、比較操作符、算術(shù)操作符、邏輯操作符、位域操作符,如“ = ”、“ += ” “ >= ”、“ <= ”、“ + ”、“ * ”、“ % ”、“ && ”、“ || ”、“ << ” , “ ^ ”等二元操作符的前后應(yīng)當(dāng)加空格。
    l 【規(guī)則 2-3-6 】 一元操作符如“ ! ”、“ ~ ”、“ ++ ”、“ -- ”、“ & ”(地址運(yùn)算符)等前后不加空格。
    l 【規(guī)則 2-3-7 】 象“ []”、“ .”、“->” 這類操作符前后不加空格。