C++編碼規範[實驗室用]

 命名規則

名稱

命名規則

例子

類名

大寫C開頭,其後每個單詞首字母大寫,單詞之間不加任何分隔符

CRenderComponent

結構名

大寫S開頭,其餘規則同類名

SRectangle

枚舉名

大寫E開頭,其餘規則同類名

ENodeType

類的公有函數

public

第一個單詞首字母小寫,且必須爲動詞,其後每個單詞首字母大寫,單詞之間不加任何分隔符

initNetwork()

類的保護函數protect

以單下劃線開頭,其餘規則同公有函數

_initNetwork()

類的私有函數private

以雙下劃線開頭,其餘規則同共有函數

__initNetwork()

類的虛函數virtul

在函數名末尾添加大寫字母V

_initNetworkV()

普通變量

每個單詞首字母大寫,且單詞之間不加任何分隔符,整體變量名必須爲名詞

LocalIP

指針變量

以小寫字母p開頭,其餘規則同普通變量

pData

類的成員變量

以m_開頭,其餘規則同普通變量

m_LocalIP

類的指針成員變量

以m_開頭,其餘規則同普通指針變量

m_pData

函數輸入參數

以小寫字母v開頭,不區分輸入參數是否爲指針,其餘規則同普通變量

vLocalIP,vData

函數輸出參數

以小寫字母vo開頭,其餘規則同函數輸入參數

voLocalIP

2. 多餘的空格

osg::Vec3f CLightningBoltInstance::lerpOsg(osg::Vec3f & vVec1,osg::Vec3f & vVec2,float vAmount)  //引用符號和變量名稱之間不要加空格
int lastLineIndex ;   //分號前不要加空格
osg::Vec3f CLightningBoltInstance::getLeft( osg::Vec3f &vForward)  //”(“後不要加空格

3. 缺少的空格

osg::Quat rotateQuat(-osg::PI_2,osg::Vec3f(0.0,1.0,0.0));  //函數的參數之間要加空格
if(m_Topology[level] == Jitter)    //if等關鍵字後面要加空格

4. cpp文件中每個函數前加如下兩行(類的構造函數和析構函數不加)

//******************************************************************
//FUNCTION:


5. 函數之間用且僅用一行空行分開;

6. 函數體內執行不同子功能的代碼用且僅用一行空行分開;

7. 文件中任何地方不能出現連續兩個或兩個以上的空行;

8. 文件中不能有被註釋掉的代碼;

9. 避免爲變量名增加註釋去說明該變量的功能,變量名本身就該明確體現其功能;

10. 避免使用全局變量,絕對不能在全局命名空間中使用全局變量;

11. 儘量避免寫註釋,如果要寫,儘量用英文,並注意拼寫錯誤;

12. 避免變量和函數命名中的拼寫錯誤;

13. 禁止在變量和函數命名中使用拼音;

14. 雙重循環使用循環變量i和k,而不是i和j

15. 一個函數只完成一個功能,函數函數控制在50行;

16. 一個類的源代碼行數控制在400行;

17. 變量的定義儘量靠近其第一次使用;

18. 對於重複出現的相同計算,應該用一個變量來保存計算結果,而不是多次重複計算

DWORD *index = new DWORD[(row - 1)*(col - 1)*2*3];   
for(int i = 0; i != (row - 1)*(col - 1)*2*3; ++i) {    // (row - 1)*(col - 1)*2*3重複出現
pVecindex->push_back(index[i]);
pTexArray->push_back((*pTexArrayTemp)[index[i]]);
}

19. 避免在程序中直接出現數字

DWORD *index = new DWORD[(row - 1)*(col - 1)*2*3];   //爲什麼要乘以2再乘以3?


20. 避免include無用的頭文件,特別是在頭文件中。請逐個刪除頭文件和cpp文件中的include語句,以測試哪些是無用的include;

21. 重載的虛函數必須使用關鍵字override進行修飾;

22. get*()成員函數的返回類型不能爲void;

23. get*()成員函數的參數中不能包含輸出參數;

24. get*()成員函數必須加const修飾,限制其不能修改所有成員變量;

25. get*()成員函數的返回值如果有必要,必須加const修飾以防止被修改;

26. 如果需要獲取某個成員變量並對其進行修改,使用fetch*()而不是get*();

27. 如果需要通過輸出參數的方式來獲取某個成員變量,使用dump*()而不是get*();

28. 避免串聯式的指針調用(如pClass1->getClass2()->getClass3()->doSomething());

29. 儘量使用了_ASSERT();

發佈了7 篇原創文章 · 獲贊 39 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章