C 程式設計規範

2021-07-11 02:45:12 字數 3298 閱讀 4207

關於組織和策略問題

0、不要拘泥於小節(了解哪些東西不應該標準化)

類、函式和列舉:likethis;變數名:likethis;私有成員變數名:likethis_;巨集名稱:like_this。

1、在高警告級別乾淨利落地進行編譯

2、使用自動構建系統

3、使用版本控制系統

最廉價也最流行的版本控制系統是cvs。

4、在**審查上投入

關於設計風格

5、乙個實體應該只有乙個緊湊的職責

6、正確、簡單和清晰第一

7、程式設計中應知道何時和如何考慮可伸縮性

使用靈活的、動態分配的資料,不要使用固定大小的陣列

優先使用線性演算法或盡可能快的演算法,盡可能避免劣於線性複雜性的演算法:常數時間複雜性演算法如push_back和雜湊表查詢,是最完美的;o(logn)對數複雜性演算法也不錯,比如set/map操作和帶有隨機迭代器的lower_bound和upper_bound;o(n)線性複雜性演算法也可以接受,如vector::insert和for_each;o(nlogn)或o(n^2)演算法要尋找替代方案;永遠不要使用指數複雜性演算法。

8、不要進行不成熟的優化

首先關注**正確和易讀,必要時再優化

9、不要進行不成熟的劣化

10、儘量減少全域性和共享資料

11、隱藏資訊

12、懂得何時和如何進行併發性程式設計

關於程式設計風格

14、寧要編譯時和連線時錯誤,也不要執行時錯誤

15、積極使用const

16、避免使用巨集

17、避免使用魔數

18、盡可能區域性地宣告變數

19、總是初始化變數

20、避免函式過長,避免巢狀過深

21、避免跨編譯單元的初始化依賴

22、儘量減少定義性依賴,避免迴圈依賴

關於函式與操作符

25、正確地選擇通過值、(智慧型)指標或者引用傳遞引數

26、保持過載操作符的自然語義

27、優先使用算術操作符和賦值操作符的標準形式

28、優先使用++和--的標準形式,優先呼叫字首形式

29、考慮過載以避免隱含型別轉換

30、避免過載&&、||或,(逗號)

31、不要編寫依賴於函式引數求值順序的**

關於類的設計與繼承

32、弄清所要編寫的是哪種類

33、用小類代替巨類

34、用組合代替繼承

35、避免從並非要設計成基類的類中繼承

36、優先提供抽象介面

37、公用繼承即可替換性。繼承,不是為了重用,而是為了被重用

38、實施安全的改寫

39、考慮將虛函式宣告為非公有的,將公用函式宣告為非虛擬的

40、避免提供隱式轉換

41、將資料成員設為私有的,無行為的聚集(c中struct)除外

42、不要公開內部資料

43、明智地使用pimpl

44、優先編寫非成員非友員函式

45、總是一起提供new和delete

46、如果提供類專門的new,應該提供所有標準形式(普通、就地和不丟擲)

關於構造、析構與複製

47、以同樣的順序定義和初始化成員變數

48、在建構函式中用初始化代替複製

49、避免在建構函式和析構函式中呼叫虛函式

50、將基類析構函式設為公用且虛擬的,或者保護且非虛擬的

51、析構函式、釋放和交換絕對不能失敗

52、一致地進行複製和銷毀

53、顯式地啟用或者禁止複製

54、避免切片。在基類中考慮用轉殖代替複製

55、使用賦值的標準形式

56、只要可行,就提供不會失敗的swap(而且要正確地提供)

關於名字空間與模組

57、將型別及其非成員函式介面置於同一命名空間中

58、應該講型別和函式分別置於不同的名字空間中,除非有意想讓它們一起工作

59、不要再標頭檔案中或者#include之前編寫名字空間using

60、要避免在不同的模組中分配和釋放記憶體

61、不要在標頭檔案中定義具有鏈結的實體

62、不要允許異常跨越模組邊界傳播

63、在模組的介面中使用具有良好可移植性的型別

關於模板與泛型

64、理智地結合靜態多型性和動態多型性

65、有意地進行顯示自定義

66、不要特化函式模板

67、不要無意地編寫不通用的**

關於錯誤處理與異常

68、廣泛地使用斷言記錄內部假設和不變式

69、建立合理的錯誤處理策略,並嚴格遵守

70、區別錯誤與非錯誤

71、設計和編寫錯誤安全**

72、優先使用異常報告錯誤

73、通過值丟擲,通過引用捕獲

74、正確地報告、處理和轉換錯誤

75、避免使用異常規範

關於stl:容器

76、預設時使用vector。否則,選擇其他合適的容器

77、用vector和string代替陣列

78、使用vector(和string::c_str)與非c++ api交換資料

79、在容器中只儲存值和智慧型指標

80、用push_back代替其他擴充套件序列的方式

81、多用範圍操作、少用單元操作

82、使用公認的慣用法真正地壓縮容量,真正地刪除元素

關於stl:演算法

83、使用帶檢查的stl實現

84、用演算法呼叫代替手工編寫的迴圈

85、使用正確地stl查詢演算法

86、使用正確地stl排序演算法

87、使謂詞成為純虛數

88、演算法和比較器的引數應多用函式物件少用函式

89、正確地編寫函式物件

關於型別安全

90、避免使用型別分支,多使用多型

91、依賴型別,而非其表示方式

92、避免使用reinterpret_cast

93、避免對指標使用static_cast

94、避免強制轉換const

95、不要使用c風格的強制轉換

96、不要對菲pod進行memcpy操作或者memcmp操作

97、不要使用聯合重新解釋表示方式

98、不要使用可變長引數(...)

99、不要使用失效物件。不要使用不安全函式

100、不要多型地處理陣列

C 程式設計規範

c coding standards 101 rules,guidelines,and best practices 組織及策略上的問題 organizational and policy issues 0.不拘小節 或 了解什麼不需要被規範化 1.在高警告級別下乾淨地編譯。2.使用自動化的構建 b...

c程式設計規範

c c 程式設計規範 1 檔案結構 每個c c 程式通常分為兩個檔案。乙個檔案用於儲存程式的宣告 declaration 稱為標頭檔案。另乙個檔案用於儲存程式的實現 implementation 稱為定義 definition c c 程式的標頭檔案以 h 為字尾,c 程式的定義檔案以 c 為字尾,...

《C 程式設計規範》

1 使用編譯器的最高警告級別,成功的構建應該是無聲無息的 沒有警告的 如果確定是無害警告,且是無法修改的第三方標頭檔案引起的,可以用自己的標頭檔案包裝起來,並有選擇性的關閉警告,然後專案中使用該標頭檔案。pragma warning push 僅禁用此標頭檔案 pragma warning disa...