C/C++代碼規範

來源:互聯網
上載者:User

C/C++代碼規範命名

命名,包括檔案名稱、類名、結構名、類型名、函數名、變數名、參數名等都是程式設計中重要的一部分。一個好的名稱,體現了一個深思熟慮的過程,同時也 能夠協助別人更好地理解開發人員的思路。如果發現程式中,充滿了a, b, c, x, y, z, tmp這種命名的變數,這時候就需要仔細的考慮自己的實現是否有問題。

類(結構)名
  • 類名必須是名詞,類名必須明確表示這個類代表了什麼。
  • 如果類名超過3個單詞,說明這個類有可能需要拆分了。
  • 不要把父類的名字帶到子類中。
  • 類名加上尾碼也是一種選擇。如下載代理類,可以寫為DownloadProxy。
  • 類名首字母大寫;用大寫字母分隔單詞,除單詞的首字母外,全部小寫;類名中不要出現底線“_”。
類(結構)屬性名稱
  • 屬性由成員首碼”m_“屬性,屬性名稱採用匈牙利命名規範。
方法
  • 方法與函數執行一個任務,因此應當用動詞來命名。比方說,DumpDataToFile()就要好於DataFile()。
  • 方法名首字母大寫;用大寫字母分隔單詞,除單詞的首字母外,全部小寫,方法名中不要出現底線。
函數
  • 方法與函數執行一個任務,因此應當用動詞來命名。
  • 函數名全部小寫,單詞之間用底線分隔。
方法與函數參數名
  • 首字母小寫。
  • 除了第一個單詞,所有單詞的首字母大寫。
  • 名稱中不應出現”_”。
類庫名
  • 如果使用C書寫類庫,或在C++不使用namespace書寫類庫,為了避免命名衝突,需要在類名,結構名,函數名前加上類庫名首碼。類庫名應當簡潔、明確。 如:

    ImEgg* ImEgg_new();   
變數名
  • 變數名使用匈牙利命名規則。
  • 全部小寫字母。
  • 使用”_”作為分隔字元。
  • 唯一能違反以上命名規則的,是一些迴圈中需要用到的自增變數。 如:
    int fun(Point* pPoint){    Point* p_nest_point = pPoint;    char* p = NULL;    char sz_buf[255];    for (int i = 0; i < 50 && (sz_buf+p++) != ' '; i++)    {        // do stuff    }}
    p point
    b byte
    w word
    dw double word
    ch char
    wch wide char
    n number
    sz char[]
    f bool
    fn function pointer
    v void
    lpsz char* terminated by zero
指標變數
  • 指標變數應在類型前加上p首碼,其後變數名命名規則不變。
  • *號永遠靠近類型,一行聲明中只出現一個指標變數。 如:
       Point* p_point;
引用變數
  • 引用變數應在類型前加上r首碼,其後變數名命名規則不變。
全域變數
  • 全用變數應使用g_屬性描述,其後變數名命名規則不變。 如:

    ImLog4c* g_pLogger;
靜態變數
  • 靜態變數應使用s_屬性描述,其後變數名命名規則不變。

    ImLog4c* s_pLogger;
枚舉類型
  • 枚舉類型命名規則使用大寫字母,用底線分隔單詞。

    Enum PIN{PIN_ON = 1;PIN_OFF;};
  • 宏命名規則使用大寫字母,用底線分隔單詞。

    #define MAX_LENGTH 50#define MAX(a, b) (a)>(b)?(a):(b)
集合名稱
  • 集合名稱使用複數,其它與變數名規範相同。

    GList* edges = g_list_new();vector<Edge> edges;typedef vector<Edge> EdgeVector;typedef map<string, EdgeVector> EdgeMap;typedef list<EdgeMap> EdgeList;
格式{}規則
  • “{“與”}”單獨佔一行。
  • “{“與”}”與上一行行首對齊。
  • If與while後哪怕只有一句話,也要加上“{“與”}”。
       while (*(buf+p++) != ' ')printf("hello\n");
()規則
  • "("與前一個關鍵字之間留一個空格。
  • "("與前函數名之間不需要留一個空格。
  • Return語句儘可能不要用"()"
    return (a*b^2>100)?(a):(b);
縮排規則
  • 縮排永遠為4。
  • 用空格代替tab。
  • Tab永遠用4。
  • 如果縮排超過5層,考慮代碼最佳化。
列長度
  • 一列不應該超過80個英文字元。
  • 一個聲明佔一行
  • 一個聲明佔一行。
三元運算式
  • 條件運算式佔一行
  • then與else應單獨佔一行。
    (condition) ? funct1() : func2();   Or   (condition)      ? long statement      : another long statement;
標頭檔順序
  • 標頭檔應當按照與功能的特點性從高到低排列。順序為
  • 目前的目錄的標頭檔。
  • 自行開發庫的標頭檔。
  • 第三方庫的標頭檔。
  • 標準C++標頭檔。
  • 標準C標頭檔。
空格
  • 操作符需要加上空格。
  • 關鍵字前後要加上空格。
  • 逗號後要加上空格。
  • 冒號後要加上空格。
  • 在一行內的分號後要加上空格,行末的分號不要空格。
    fun(a, b);for (int I = 0; I < 50; i++);
類與結構類檔案與結構檔案命名
  • 公有類,C中用以類比類的結構,需要位於一個獨立的檔案中。
  • 檔案名稱與公有類名,C中用以類比類的結構名相同。
類與結構標頭檔布局
  • 檔案描述,使用Doxygen文法。
  • 標頭檔保護宏。
  • 標頭檔。
  • 類或結構描述,使用Doxygen文法。
  • 類或結構名。
  • 屬性描述,使用Doxygen文法。以下每個屬性或方法都要求對應一個描述。
  • 屬性聲明。
  • C++與身命周期相關函式宣告。C++中的構造方法,析構方法以及Factory 方法。
  • C++操作符重載。
  • C++訪問器,get與set方法。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.