c++代碼規(guī)范

說明

本文的目的是規(guī)范代碼書寫,使代碼具有較好的可讀性。
文檔中除"建議"贸人,"提倡"间景,"不提倡"文字外,其他均為強(qiáng)制要求艺智。

一般的倘要,建議c++程序員都去閱讀并參考一下google編程風(fēng)格指南,這是一個更加詳細(xì)的規(guī)范十拣,但略有復(fù)雜封拧,本規(guī)范對其進(jìn)行了簡化。

語言

  • 頭文件保護(hù)
    所有頭文件都應(yīng)該使用#define防止頭文件被多重包含夭问,命名格式為:<PROJECT>_<PATH>_<FILE>_H_
#ifndef FRPL_CORE_TIME_H_
#define FRPL_CORE_TIME_H_
...
#endif // FRPL_CORE_TIME_H_
  • 宏定義
    盡量不使用宏定義泽西,用內(nèi)聯(lián)函數(shù),const缰趋,枚舉代替
const int NUM_COUNT;
  • 函數(shù)參數(shù)
    定義函數(shù)時捧杉,參數(shù)順序為:輸入?yún)?shù)在前,輸出參數(shù)在后秘血。
    新添加的輸入?yún)?shù)味抖,也要置于輸出參數(shù)之前

  • 命名空間
    命名空間使用小寫字母,長度應(yīng)盡量短灰粮,可使用縮寫
    代碼庫的命名空間frpl仔涩,其他項目代碼的命名空間為"項目名"
    不提倡使用using(避免污染命名空間,提高編譯執(zhí)行速度),例如

using namespace std;
string aa;

而應(yīng)使用

std::string aa;

格式

  • 使用"{"時新起一行粘舟。在整個函數(shù)只有一行時红柱,不考慮。

  • 空格 vs 制表符
    使用空格代替制表符蓖乘,每次縮進(jìn)4個空格锤悄。
    為了保留使用tab的編碼習(xí)慣,可以在IDE上設(shè)置用空格替換制表符(每次使用tab時嘉抒,IDE會自動轉(zhuǎn)為4個空格)

VS2010設(shè)置方式:Tools ->Options ->Text Editor , C/C++ -> Tabs,選擇Insert spaces零聚,設(shè)置Tab size:4
Sublime2設(shè)置方式:首選項->設(shè)置默認(rèn)->修改為"tab_size":4, "translate_tabs_to_spaces": true

  • 比較操作符,復(fù)制操作符“=”些侍、“+=”隶症,算術(shù)操作符“+”,“%”岗宣,邏輯操作符“&&”蚂会、“&”,位域操作符“<<”等雙目操作符的前后要加空格
a += b;
k = x + y;
  • 單目操作符("!"耗式、"~"胁住、"++"趁猴、"--"、"&")彪见、函數(shù)參數(shù)缺省值"="前后無空格

  • 逗號,分號只在后面加空格

void fun(int a, int b);
  • 如一行語句過長儡司,則高級運(yùn)算符前后的空格可以省略
a*b + c*d

命名

  • 通用命名規(guī)則
    必須使用有意義的單詞或縮寫進(jìn)行命名,可以使用一些通用的單詞縮寫(如msg等)余指,可以但不提倡以英文單詞的前3~4個字母作為其縮寫捕犬;
    命名規(guī)則:以大小駝峰式命名法為主,小寫字母加下劃線為輔

小駝峰法:第一個單字以小寫字母開始,第二個單字的首字母大寫酵镜。例如:firstName碉碉、lastName。
大駝峰法:每一個單字的首字母都采用大寫字母淮韭,例如:FirstName誉裆、LastName、CamelCase缸濒。

  • 文件、目錄:小寫字母加下劃線
url_table.h
  • 類型(類粱腻、結(jié)構(gòu)體庇配、枚舉):大駝峰法,無下劃線
class VideoAcqAVI ...
struct DetectMsg ...
  • 變量:小寫字母加下劃線绍些、全小寫捞慌、小駝峰法均可,要在同一文件中保持一致
std::string table_name;
std::string tablename;
std::string tableName;

常量建議在名稱前加k, 全局變量建議在名稱前加g

const int kUseLimit = 9;
int gCashBalance;
  • 函數(shù)
    全局函數(shù)柬批、類內(nèi)普通函數(shù):大駝峰法啸澡,無下劃線
bool DetectVehicle()

類內(nèi)get/set/inline函數(shù):小寫字母+_+變量名

void set_table_name()
void set_tableName()
class VideoAcqAVI()
{
public:
    bool Init();
    void set_tableName();
private:
    std::string tableName;
}
  • 枚舉值、宏命名:全大寫+下劃線(不建議使用宏)
MY_EXCITING_ENUM_VALUE
  • 前綴(類型名氮帐、全局函數(shù)嗅虏、鏈接庫)
    暴露在命名空間全局作用域中的類型名、全局函數(shù)均以Fr開頭(即類內(nèi)函數(shù)不屬于此范疇)
    動態(tài)上沐、靜態(tài)鏈接庫均以Fr開頭
    明確用于內(nèi)部使用的類型皮服、函數(shù)、庫可以使用Fri開頭

注釋

  • doxygen注釋風(fēng)格

  • 文件頭注釋

/**
 *Copyright (c),2013, Freative
 *
 *@brief  簡述文件完成的主要功能
 *@author 作者列表 
 *@version 版本
 *@date   完成日期
 *
 */
  • 類参咙,函數(shù)龄广,變量注釋
/**
 * @class  類名
 * @brief  簡述   
 * @author 作者列表   
 * @note   細(xì)節(jié)描述  
 */
  • 函數(shù)注釋
/**
 * @brief xx函數(shù)
 * @param[in] a 參數(shù)說明 
 * @param[in] b 參數(shù)說明
 * @param[in] c 參數(shù)說明
 * @param[out] buf 輸出結(jié)果
 * @return 0:函數(shù)執(zhí)行成功。
 * @return 1:函數(shù)執(zhí)行失敗蕴侧,原因xxx
 */
  • 類成員函數(shù)择同、成員變量注釋
/** 成員變量描述 */ 
int  m_Var;
int  m_color;     /**< 顏色變量 */ 
  • 枚舉類型注釋
/**  @brief  枚舉類型說明  */ 
enum  AnotherEnum         
 {             
    V1,  /**< 值描述  */            
    V2   /**< 值描述 */          
}; 
  • 代碼注釋
    對于實現(xiàn)代碼中巧妙的、晦澀的净宵、有趣的敲才、重要的地方加以注釋

  • TODO,HACK,FIXME注釋
    這類注釋用于在代碼中留下標(biāo)記裹纳,以便日后查找更改。
    為方便搜索归斤,采用如下格式痊夭。TODO/HACK/FIXME(姓名或聯(lián)系方式):注釋內(nèi)容

注釋標(biāo)識 功能
TODO 有一些額外的工作還沒有做(但沒有bug)
HACK 采用了丑陋的方式解決了問題
FIXME 有問題尚未解決

盡量不用FIXME,而是應(yīng)fix掉這個問題脏里。如果因時間不足解決方法丑陋她我,請用HACK標(biāo)記

// TODO(someone@fmail.com):xxx
// HACK(tom):xxx
// FIXME(jerry):xxx

windows特性

  • 使用VS進(jìn)行編譯時,將警告級別設(shè)置為3級或更高迫横,并將所有warnings當(dāng)作errors處理

  • 很多代碼會包含stdafx.h番舆,為方便代碼共享,不建議顯式包含此頭文件矾踱,而改為啟用編譯器選項FI以自動包含

代碼庫與項目開發(fā)

  • 代碼庫(FRPL)會補(bǔ)充一些額外的規(guī)范用于限定該項目的源代碼恨狈。

  • 在其他項目中,也可以補(bǔ)充額外的規(guī)范呛讲,且為了保證項目組的代碼一致性禾怠,可以有與本規(guī)范不同的約定。這些補(bǔ)充和變化都應(yīng)在項目文檔中注明贝搁。

  • 對于歷史遺留項目吗氏,不改變原代碼風(fēng)格

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市雷逆,隨后出現(xiàn)的幾起案子弦讽,更是在濱河造成了極大的恐慌,老刑警劉巖膀哲,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件往产,死亡現(xiàn)場離奇詭異,居然都是意外死亡某宪,警方通過查閱死者的電腦和手機(jī)仿村,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兴喂,“玉大人奠宜,你說我怎么就攤上這事≌跋耄” “怎么了压真?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蘑险。 經(jīng)常有香客問我滴肿,道長,這世上最難降的妖魔是什么佃迄? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任泼差,我火速辦了婚禮贵少,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘堆缘。我一直安慰自己滔灶,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布吼肥。 她就那樣靜靜地躺著录平,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缀皱。 梳的紋絲不亂的頭發(fā)上斗这,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天,我揣著相機(jī)與錄音啤斗,去河邊找鬼表箭。 笑死,一個胖子當(dāng)著我的面吹牛钮莲,可吹牛的內(nèi)容都是我干的免钻。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼崔拥,長吁一口氣:“原來是場噩夢啊……” “哼极舔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起握童,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叛赚,沒想到半個月后澡绩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡俺附,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年肥卡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片事镣。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡步鉴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出璃哟,到底是詐尸還是另有隱情氛琢,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布随闪,位于F島的核電站阳似,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏铐伴。R本人自食惡果不足惜撮奏,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一俏讹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧畜吊,春花似錦泽疆、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至青自,卻和暖如春株依,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背延窜。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工恋腕, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人逆瑞。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓荠藤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親获高。 傳聞我的和親對象是個殘疾皇子哈肖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 最近在整理代碼,所以將以前積累的一些代碼規(guī)范方面的知識分享出來念秧,希望能對大家編碼時有所幫助淤井。一個好的代碼風(fēng)格的重要...
    小小土豆dev閱讀 1,930評論 3 19
  • 最近感覺自己老了,一直呆在小公司,感覺到了疲憊與苦澀,雖然并沒有如老板所想已達(dá)到瓶頸,依然感覺還有好多東西可學(xué)和想...
    xuq閱讀 2,439評論 12 57
  • 【按語】由于我公司正在準(zhǔn)備開發(fā)新的App,到時可能有些iOS開發(fā)者參與進(jìn)來摊趾。這時如果每個人的Objective-C...
    niu神DNS閱讀 1,049評論 2 14
  • 來自 Colinhou的博客 因為代碼命名不規(guī)范被老大叼了,被同事逼逼了币狠。。砾层。 我們寫出來的代碼會給很多人看漩绵,為了...
    BlessNeo閱讀 528評論 1 5
  • 今天晚上,一位肛炮,身穿綠色西裝的“顧客”正一跳一跳的跳到我家門前止吐,我想:“一定是它餓了,所以它是想和我們共餐...
    袁陽feea閱讀 136評論 0 1