1. 程式人生 > >C/C++程式碼命名和格式規範

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; w word; ch char; n number; who widechar;

指標變數

指標變數應在型別前加上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 edges;
    typedef vector EdgeVector;
    typedef map EdgeMap;
    typedef list EdgeList;

格式

{}規則

除了空的情況可以直接“{}”,其他“{“與”}”單獨佔一行,並對齊。
“{“與上一行行首對齊。
If與while後哪怕只有一句話,也要加上“{“與”}”。
    while (*(buf+p++) != ' ')
    {
        printf("hello\n");
    }

()規則

"("與前一個關鍵字之間留一個空格。
"("與前函式名之間不需要留一個空格。
return語句儘可能不要用"()"
    return (a * b^2 > 100) ? (a) : (b);    //儘量不要這樣
    return a * b^2 > 100 ? a : b;          //這種寫法更規範

縮排規則

縮排永遠為4。
用空格代替tab。
Tab永遠用4。
如果縮排超過5層,考慮程式碼優化。

列長度

一列不應該超過80個英文字元。
一個宣告佔一行
一個宣告佔一行。

三元表示式

條件表示式佔一行
then與else應單獨佔一行。

標頭檔案順序

標頭檔案應當按照與功能的特點性從高到低排列。順序為
當前目錄的標頭檔案。
自行開發庫的標頭檔案。
第三方庫的標頭檔案。
標準C++標頭檔案。
標準C標頭檔案。

空格

操作符需要加上空格。
關鍵字前後要加上空格。
逗號後要加上空格。
冒號後要加上空格。
在一行內的分號後要加上空格,行末的分號不要空格。
    fun(a, b);
    for (int I = 0; I < 50; i++);

類與結構

類檔案與結構檔案命名

公有類,C中用以模擬類的結構,需要位於一個獨立的檔案中。
檔名與公有類名,C中用以模擬類的結構名相同。

類與結構標頭檔案佈局

檔案描述,使用Doxygen語法。
標頭檔案保護巨集。
標頭檔案。
類或結構描述,使用Doxygen語法。
類或結構名。
屬性描述,使用Doxygen語法。以下每個屬性或方法都要求對應一個描述。
屬性宣告。
C++與身命週期相關函式宣告。C++中的構造方法,析構方法以及工廠方法。
C++操作符過載。
C++訪問器,get與set方法。

相關推薦

C/C++程式碼命名格式規範

命名 命名,包括檔名、類名、結構名、型別名、函式名、變數名、引數名等都是程式設計中重要的一部分。一個好的名稱,體現了一個深思熟慮的過程,同時也能夠幫助別人更好地理解開發者的思路。如果發現程式中

GSM A5/1演算法C語言程式碼實現分析

介紹 全球超過200個國家和地區超過10億人正在使用GSM電話。對中國使用者來說,GSM就是移動和聯通的2g模式。 在1982年A5首次提出時,人們認為A5 / 1金鑰長度要128位,但最終確定的結果是64位金鑰(政府可以使用暴力破解算出)。很可能是政府的壓力迫使金鑰位數縮

C# DateTime各種用法以及格式規範彙總

C#獲得當前系統時間: DateTime dt = DateTime.Now; Environment.TickCount可以得到“系統啟動到現在”的毫秒值 DateTime now = DateTime.Now; Console.WriteLine(now.ToStri

前端程式碼編碼設計規範系列——JavaScript程式設計規範

1文件資訊 條目 內容 專案編號 通用 專案名稱 通用 標題 JavaScript程式設計規範 類別 規範文件 當前 試用草稿 摘要 當前版本 V1.0 日期 2015/11/9 作者 徐維堅(xu

C語言變量函數命名規範

nbsp num 開始 strong report pos utility stp 這樣的 變量名規則第一個字母: 局部 l、 全局 g第二個字母: bit(bt)、 bool(b)、 char(c)、 int(i)、 short(s)、 long(l)、 unsigned

我用的C/C++編程規範——命名約定

usr cas 字母 必須 name children conf hang 類成員變量 我使用的命名約定是google的規範,以下內容摘自《google cpp style guide》。 最重要的一致性規則是命名管理,命名風格直接可以直接確定命名實體是:類型、變量、函數、

C#格式規範

括號 eap file 多個 前綴 重載 命名空間 amp ssi 前言 之前工作中整理的一篇編碼規範。 代碼註釋 註釋約定 只在需要的地方加註釋,不要為顯而易見的代碼加註釋 使用 /// 生成的xml標簽格式的文檔註釋 方法註釋 所有的方法都應該以描述這段代碼的功能

C++必備基礎知識編程規範

C++C++必備基礎知識和編程規範C語言是面向過程的程序設計,強調程序的執行順序,自上而下,而C++是面向對象的程序設計,將程序看做多個對象組成,每個對象有自己的屬性(變量)和行為(函數)。2.屬性是描述對象特征的數據,行為是對象能進行的操作,如英雄聯盟裏每一個英雄都有自己的屬性(生命值,法力值,防禦力,攻擊

2.我使用的C/C++編寫規範命名約定

test imu dir use 規範 意義 BE 常見 單詞 自用的規範,參考自Google、華為與微軟。? 最重要的一致性規則是命名管理,命名風格直接可以直接確定命名實體是:類型、變量、函數、常量、宏等等,無需查找實體聲明,我們大腦中的模式匹配引擎依賴於這些命名規則。

3. 我使用的C/C++編寫規範格式

lse word ble 簡單 編輯器 func 水平 cin 操作符 閑來無事,把自用的C/C++編程規範整理一下。內容主要來自Google與華為,並參考了一點微軟。   整個項目服從統一的編程風格是很重要的,這樣才能讓所有人在閱讀和理解代碼時更加容易。 1.行長度  

CRC32 C語言程式碼 JAVA程式碼

C語言如下: uint32_t crc32_compute(uint8_t const * p_data, uint32_t size){    uint32_t crc;    crc = 0xFFFFFFFF;    for (uin

CRC8 C語言程式碼 JAVA 程式碼

crc8 從語言程式碼如下: unsigned char const crc8_tab[256]   =   {      0x00,0x07,0x0E,0x09,0x1C,0x1B,0x12,0x15,0x38,0x3F,0x36,0x

C++ Essentials 之 lower_bound upper_bound 的比較函式格式不同

第一次注意到這個問題。 cppreference 上的條目: lower_bound upper_bound C++17 草案 N4659 lower_bound template<class ForwardIterator, class T> ForwardIterator lower_

C/C++中printfC++中cout的輸出格式

一、 Printf 輸出格式   C中格式字串的一般形式為: %[標誌][輸出最小寬度][.精度][長度]型別,其中方括號[]中的項為可選項。各項的意義介紹如下:1.型別型別字元用以表示輸出資料的型別,其格式符和意義下表所示: 表示輸出型別的格式字元   格式字元意義 a          

C# 獲取字串轉Hex格式BCD格式

一、字串轉BCD格式 1、設計要求 上位機獲取輸入的年月日字串,轉換成BCD格式後傳遞到下位機。 輸入一串序列號,最小1位,年最大4位;月和日最小一位,最大兩位。   2、設施步驟 (1)獲取字串,判斷字串的長度是否符合要求。 (2)判讀字串是否是十

哈夫曼樹詳細講解(帶例題C語言程式碼實現——全註釋)

** 哈夫曼樹詳細講解(帶例題和C語言程式碼實現——全註釋) ** 定義 哈夫曼樹又稱最優二叉樹,是一種帶權路徑長度最短的二叉樹。所謂樹的帶權路徑長度,就是樹中所有的葉結點的權值乘上其到根結點的 路徑長度(若根結點為0層,葉結點到根結點的路徑長度為葉結點

C++ 判斷左值右值 (使用程式碼判斷)

C++的左值和右值的概率繼承自C語言裡。C++11之後引入右值。 左值和右值的根本區別就是左值可以使用&取地址,而右值是不可以取地址的。還有一點就是,右值是可以賦值給左值,但是反過來就不行,即左值不能賦值給右值。通俗的講,就是左值在=左邊,右值在右邊。 其實我們如果在判斷左值和右

C語言程式碼規範(程式設計規範

C語言程式碼規範(程式設計規範) 什麼叫規範?在C語言中不遵守編譯器的規定,編譯器在編譯時就會報錯,這個規定叫作規則。但是有一種規定,它是一種人為的、約定成俗的,即使不按照那種規定也不會出錯,這種規定就叫作規範。 雖然我們不按照規範也不會出錯,但是那樣程式碼寫得就會很亂。大家剛開始學習C語言

.NET/C# 在程式碼中測量程式碼執行耗時的建議(比較系統性能計數器系統時間)

我們有很多種方法評估一個方法的執行耗時,比如使用效能分析工具,使用基準效能測試。不過傳統的在程式碼中編寫計時的方式依然有效,因為它可以生產環境或使用者端得到真實環境下的執行耗時。 如果你希望在 .NET/C# 程式碼中編寫計時,那麼閱讀本文可以獲得一些建議。閱讀本文也可以瞭解到 Qu

程式設計規範(一):C/C++的命名原則

無以規矩,不成方圓。 符合規範的統一命名是程式編寫的基本規矩之一。很多時候我們不願意接手別人的程式碼,原因之一就是程式碼命名很亂;我們自己寫程式碼時經常寫到後面忘了前面,也有可能是我們沒有養成規範的命名習慣。當寫程式碼成為一種藝術的美時,這種美的最直接的體現就