隨想錄(寫給自己的C 程式設計規範)

2021-06-07 14:28:40 字數 1990 閱讀 1597

對於我這樣乙個c語言的程式設計師來說,編寫c++的機會其實不太多。但是我還是比較喜歡寫c++語言,原因主要有幾個方面:(1)自己學c++語言的時間比較長了,也比較了解,如果從大一的時候算起,現在也有小十年了;(2)windows下面的開發工具確實很好用,比如偵錯程式呼叫、彙編**檢視也方便,學起來其實沒有什麼障礙;(3)基於c++語言的開源專案還是比較多的,比如說的emule、webkit、notepad++、libsvm,掌握好c++語言對自己的幫助還是挺大的。

網上有位知名的朋友叫雲風,早期在他寫的書《我的程式設計感悟》當中也是對c++大加褒獎,可是在後來的工程實踐中反而感覺到c語言才是最好用的語言。相信很多的朋友都有類似的經驗。當然,不可否認c++還是存在很大的市場,但是它的應用範圍和過去相比,確實是大大縮小了。一方面,精通c++的人實在是太少了,用好c++的人更是鳳毛麟角;另外一方面,c++的學習代價、應用代價實在是很高,你沒有辦法要求專案組裡邊的每個人都有很高的c++應用水平,這是沒有辦法做到的,就算做到了,代價是十分昂貴的。所以,為了消除彼此成員之間的差別,很多時候c++的程式設計規範就變成了c語言的程式設計規範,這可以從google c++ style guide可以看出來。

(1) 總則

a)盡量選擇所有編譯器都支援的c++標準

b)必須了解類的記憶體分布結構

c)必須了解編譯器對c++的**操作

d)指標是所有錯誤的**,盡量用引用代替

e)用const對入參、出參和類函式進行限制

f)多用namespace限定類的作用範圍

g)少用c++的高階特性

h)時刻在需要處理c檔案的時候新增extern 「c」

i)string類是萬惡之源,盡量少用

(2)標頭檔案

a)定義標頭檔案的時候首先新增編譯巨集

b)新增最少的標頭檔案依賴

c)頭檔名爭取和類名一致

d)標頭檔案中只包括型別定義、巨集定義和函式宣告

e)類的標頭檔案和實現檔案一一對應

(3)命名

a)類的命名按照首字母大寫的格式進行,比如parent

b)巨集按照全大寫的格式進行,比如max

c)函式按照小寫進行,中間用連詞號連線,比如get_max_number

d)變數按照乙個單詞進行,比如number,index等等

e)變數、函式多用static限定範圍,類多用namespace限定範圍

(4)函式

a)杜絕可變參的函式,不利於編譯器檢查

b)少用全域性函式

c)函式入參多用引用型別

d)返回值多用引用型別,但是臨時變數不能用引用

e)全域性函式少用過載,最好不用

f)最好不用使用模板函式,即使使用也只限定於自己使用

(5)類

a)少用繼承,多用組合

b)對於建構函式,多用explicit,防止編譯器強行轉換

c)對於指標成員變數,務必注意拷貝建構函式和賦值函式的編寫

d)對於類指標,為了防止記憶體洩漏或者資源重複釋放,最好自己管理,不要相信智慧型指標

e)繼承類中的析構函式要定義為virtual型別

f)建構函式要簡單,複雜的資源分配請在類成員函式init中定義

g)對於全域性類變數,相互定義之間不要存在依賴

h)嚴格區分類指標的釋放,注意delete和delete的區別

i)對於類中鎖的問題,可以利用類的構造、析構、引用特性解決

j)多用class,少用struct

(6)類的高階特性

a)不要使用算術符過載

b)不要用模板,除非自己用,自己用也要少用

c)不用使用c++中的typeid屬性

d)不要用異常

e)不要用virtual繼承

f)不要用多類繼承

g)不用要stl,當類中存在指標變數的時候,stl很多時候是搞不定的,而vector、list、find、sort你是搞得定的

隨想錄(cuda程式設計)

很早就知道gpu可以被用來進行加速處理,但是不知道基本原理是什麼。昨天看了一下別人的示範 突然之間明白了很多。為了防止自己忘記這些知識點,特地做如下紀錄。1 顯示卡程式設計 gpu主要是指顯示卡上的處理器部分。顯示卡和cpu之間主要通過pci或者pcie連線,所以必然要求生成的可執行檔案一部分在ho...

隨想錄(uclibc的學習)

對於交叉工具鏈來說,uclibc一般都是包括在工具鏈裡面的。通過uclibc,大家可以像開發x86使用者程式一樣,開發其他cpu上的應用程式。uclibc相比較glibc而言,包含的檔案較少,功能也有刪減,且每乙個目錄代表乙個動態庫,閱讀起來基本不會遇到什麼問題。1 uclibc的 怎麼看?建議直接...

隨想錄(epoll的使用)

要說linux下面最好用的介面恐怕就是epoll了。不管是網路程式設計,還是其他pipe程式設計,使用epoll都很方便。而且,epoll的函式個數少,結構也非常簡單。一般只要學好了epoll create epoll ctl epoll wait close這四個函式就可以了。如果大家有這方面的需...