• <li id="ccaac"></li>
  • <table id="ccaac"><rt id="ccaac"></rt></table>
  • <td id="ccaac"></td>
  • <td id="ccaac"></td>
  • 寫C++代碼應該養成的好習慣

    上一篇 / 下一篇  2010-01-10 10:12:55

      其實那些琳瑯滿目的規則,最終的目前都是為了給我們帶來更多的方便,如果覺得學習和記憶這些規則所花費的代價要比規則所帶來的方便要大得多,那么用這些時間去打CS好了。

      當然在源文件變成了二進制交給計算機之后,那種規則所形成的格式是完全沒有任何體現的,那么我們為什么還要用這么多的精力和時間來做這些“沒有無謂的事情”呢?最后執行這些命令的是機器,但是這些命令是要在寫程序的人理解之后才放心交給機器,胡亂的敲些字符那個不叫程序。

      總之,這些規則是為了我們可以用更少的時間來理解程序和查找里面的錯誤,這就是要養成這些習慣的目的!如果僅僅是為了挑戰自己的記憶極限的話,在這個地方不會讓你覺得有任何的快感,因為沒有人會因為你記住了這些規則而羨慕你!

      而且本人及其鄙視那些為了記憶而記憶的人,因為他們通常都把活人總結出來的經驗用死人的方式來對待。而且考試是的試卷上也不會出現下面的任何一個規則。

      不多廢話!(這些規則是別人整理出來,我又再整理出來我覺得我會去記住的!)


    【規則 1 】 在每個類聲明之后、每個函數定義結束之后都要加空行。
    【規則 2 】 在一個函數體內,邏揖上密切相關的語句之間不加空行,其它地方應加空行分隔。
    【規則 3 】 一行代碼只做一件事情,如只定義一個變量,或只寫一條語句。這樣的代碼容易閱讀,并且方便于寫注釋。
    【規則 4 】 if 、 for 、 while 、 do 等語句自占一行,執行語句不得緊跟其后。不論執行語句有多少都要加 {} 。這樣可以防止書寫失誤。
    【建議 5 】 盡可能在定義變量的同時初始化該變量(就近原則)l 【規則 2-3-1 】 關鍵字之后要留空格。象 const 、 virtual 、 inline 、 case 等關鍵字之后至少要留一個空格,否則無法辨析關鍵字。象 if 、 for 、 while 等關鍵字之后應留一個空格再跟左括號‘(',以突出關鍵字。
    【規則 6 】 函數名之后不要留空格,緊跟左括號‘(',以與關鍵字區別。
    【規則 7 】 ‘('向后緊跟,‘)'、‘,'、‘ ; '向前緊跟,緊跟處不留空格。
    【規則 8 】 ‘,'之后要留空格,如 Function(x, y, z) 。如果‘ ; '不是一行的結束符號,其后要留空格,如 for (initialization; condition; update) 。
    【規則 9 】 賦值操作符、比較操作符、算術操作符、邏輯操作符、位域操作符,如“ = ”、“ += ” “ >= ”、“ <= ”、“ + ”、“ * ”、“ % ”、“ && ”、“ || ”、“ << ” , “ ^ ”等二元操作符的前后應當加空格。
    【規則 10 】 一元操作符如“ ! ”、“ ~ ”、“ ++ ”、“ -- ”、“ & ”(地址運算符)等前后不加空格。
    【規則 11 】 象“ []”、“ .”、“->” 這類操作符前后不加空格。
    【建議 12 】 對于表達式比較長的 for 語句和 if 語句,為了緊湊起見可以適當地去掉一些空格,如 for (i=0; i<10; i++)和 if ((a<=b) && (c<=d))
    void Func1(int x, int y, int z); // 良好的風格
    void Func1 (int x,int y,int z); // 不良的風格
    if (year >= 2000) // 良好的風格
    if(year>=2000) // 不良的風格
    if ((a>=b) && (c<=d)) // 良好的風格
    if(a>=b&&c<=d) // 不良的風格
    for (i=0; i<10; i++) // 良好的風格
    for(i=0;i<10;i++) // 不良的風格
    for (i = 0; I < 10; i ++) // 過多的空格
    x = a < b ? a : b; // 良好的風格
    x=a<b?a:b; // 不好的風格
    int *x = &y; // 良好的風格
    int * x = & y; // 不良的風格
    array[5] = 0; // 不要寫成 array [ 5 ] = 0;
    a.Function(); // 不要寫成 a . Function();
    b->Function(); // 不要寫成 b -> Function();
    2.4 對齊
    【 規則 13 】 程序的分界符‘ { '和‘ } '應獨占一行并且位于同一列,同時與引用它們的語句左對齊。
    【 規則 14 】 { } 之內的代碼塊在‘ { '右邊數格處左對齊。
    示例 2-4 ( a )為風格良好的對齊,示例 2-4 ( b )為風格不良的對齊。
    void Function(int x)
    {

    … // program code

    }
    void Function(int x){

    … // program code

    }

    if (condition)
    {

    … // program code

    }

    else

    {

    … // program code

    }
    if (condition){

    … // program code

    }

    else {

    … // program code

    }

    for (initialization; condition; update)

    {

    … // program code

    }
    for (initialization; condition; update){

    … // program code

    }

    While (condition)

    {

    … // program code

    }
    while (condition){

    … // program code

    }

    如果出現嵌套的{},則使用縮進對齊,如:

    {

    {

    }

    }

    示例 2-4(a) 風格良好 的對齊 示例2-4(b) 風格不良 的對齊
    【 規則 15 】 代碼行最大長度宜控制在 70 至 80 個字符以內。代碼行不要過長,否則眼睛看不過來,也不便于打印。
    【 規則 16 】 長表達式要在低優先級操作符處拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要進行適當的縮進,使排版整齊,語句可讀。
    if ((very_longer_variable1 >= very_longer_variable12)

    && (very_longer_variable3 <= very_longer_variable14)

    && (very_longer_variable5 <= very_longer_variable16))

    {

    dosomething();

    }

    virtual CMatrix CMultiplyMatrix (CMatrix leftMatrix,

    CMatrix rightMatrix);

    for (very_longer_initialization;

    very_longer_condition;

    very_longer_update)

    {

    dosomething();

    }

    命名規則
    比較著名的命名規則當推Microsoft公司的“匈牙利”法,該命名規則的主要思想是“在變量和函數名中加入前綴以增進人們對程序的理解”。例如所有的字符變量均以ch為前綴,若是指針變量則追加前綴p。如果一個變量由ppch開頭,則表明它是指向字符指針的指針。
    “匈牙利”法最大的缺點是煩瑣,例如
    int i, j, k;
    float x, y, z;
    倘若采用“匈牙利”命名規則,則應當寫成
    int iI, iJ, ik; // 前綴 i表示int類型
    float fX, fY, fZ; // 前綴 f表示float類型
    如此煩瑣的程序會讓絕大多數程序員無法忍受。
    據考察,沒有一種命名規則可以讓所有的程序員贊同,程序設計教科書一般都不指定命名規則。命名規則對軟件產品而言并不是“成敗悠關”的事,我們不要化太多精力試圖發明世界上最好的命名規則,而應當制定一種令大多數項目成員滿意的命名規則,并在項目中貫徹實施。
    共性規則
    本節論述的共性規則是被大多數程序員采納的,我們應當在遵循這些共性規則的前提下,再擴充特定的規則,如3.2節。
    【 規則 17 】標識符應當直觀且可以拼讀,可望文知意,不必進行“解碼”。
    標識符最好采用英文單詞或其組合,便于記憶和閱讀。切忌使用漢語拼音來命名。程序中的英文單詞一般不會太復雜,用詞應當準確。例如不要把CurrentValue寫成NowValue。
    【 規則 18 】標識符的長度應當符合“min-length && max-information”原則。
    幾十年前老ANSI C規定名字不準超過6個字符,現今的C++/C不再有此限制。一般來說,長名字能更好地表達含義,所以函數名、變量名、類名長達十幾個字符不足為怪。那么名字是否越長約好?不見得! 例如變量名maxval就比maxValueUntilOverflow好用。單字符的名字也是有用的,常見的如i,j,k,m,n,x,y,z等,它們通常可用作函數內的局部變量。
    【 規則 19 】命名規則盡量與所采用的操作系統或開發工具的風格保持一致。
    例如Windows應用程序的標識符通常采用“大小寫”混排的方式,如AddChild。而Unix應用程序的標識符通常采用“小寫加下劃線”的方式,如add_child。別把這兩類風格混在一起用。
    【 規則 20 】程序中不要出現僅靠大小寫區分的相似的標識符。
    例如:
    int x, X; // 變量x 與 X 容易混淆
    void foo(int x); // 函數foo 與FOO容易混淆
    void FOO(float x);
    【 規則 21 】程序中不要出現標識符完全相同的局部變量和全局變量,盡管兩者的作用域不同而不會發生語法錯誤,但會使人誤解。
    【 規則 22 】變量的名字應當使用“名詞”或者“形容詞+名詞”。
    例如:
    float value;
    float oldValue;
    float newValue;
    【 規則 23 】全局函數的名字應當使用“動詞”或者“動詞+名詞”(動賓詞組)。類的成員函數應當只使用“動詞”,被省略掉的名詞就是對象本身。
    例如:
    DrawBox(); // 全局函數
    box->Draw(); // 類的成員函數
    【 規則 24 】用正確的反義詞組命名具有互斥意義的變量或相反動作的函數等。
    例如:
    int minValue;
    int maxValue;
    int SetValue(…);
    int GetValue(…);
    【 建議 25 】盡量避免名字中出現數字編號,如Value1,Value2等,除非邏輯上的確需要編號。這是為了防止程序員偷懶,不肯為命名動腦筋而導致產生無意義的名字(因為用數字編號最省事)。
    3.2 簡單的Windows應用程序命名規則
    作者對“匈牙利”命名規則做了合理的簡化,下述的命名規則簡單易用,比較適合于Windows應用軟件的開發。
    【 規則 26 】類名和函數名用大寫字母開頭的單詞組合而成。
    例如:
    class Node; // 類名
    class LeafNode; // 類名
    void Draw(void); // 函數名
    void SetValue(int value); // 函數名
    【 規則 27 】變量和參數用小寫字母開頭的單詞組合而成。
    例如:
    BOOL flag;
    int drawMode;
    【 規則 28 】常量全用大寫的字母,用下劃線分割單詞。
    例如:
    const int MAX = 100;
    const int MAX_LENGTH = 100;
    【 規則 29 】靜態變量加前綴s_(表示static)。
    例如:
    void Init(…)
    {

    static int s_initValue; // 靜態變量

    }
    【 規則 30 】如果不得已需要全局變量,則使全局變量加前綴g_(表示global)。

    例如:
    int g_howManyPeople; // 全局變量
    int g_howMuchMoney; // 全局變量
    【 規則 31 】類的數據成員加前綴m_(表示member),這樣可以避免數據成員與成員函數的參數同名。
    例如:
    void Object::SetValue(int width, int height)
    {

    m_width = width;

    m_height = height;

    }
    【 規則 32 】為了防止某一軟件庫中的一些標識符和其它軟件庫中的沖突,可以為各種標識符加上能反映軟件性質的前綴。例如三維圖形標準OpenGL的所有庫函數均以gl開頭,所有常量(或宏定義)均以GL開頭。


    TAG: 習慣

     

    評分:0

    我來說兩句

    顯示全部

    :loveliness::handshake:victory::funk::time::kiss::call::hug::lol:'(:Q:L;P:$:P:o:@:D:(:)

    Open Toolbar
  • <li id="ccaac"></li>
  • <table id="ccaac"><rt id="ccaac"></rt></table>
  • <td id="ccaac"></td>
  • <td id="ccaac"></td>
  • 床戏视频