《checklist程式設計規範》筆記

2021-08-19 17:25:40 字數 4438 閱讀 1965

簡單的總結一下c編碼風格:

第一章 排版
1.1 縮排

整個專案中要麼4個空格縮排,要麼乙個tab鍵縮排,不允許混用。tab鍵要保證寬度是4個空格

縮排要求:if

else

case

forwhile語句要縮排,要縮排,extern "c",namespace 塊、case除外

空格使用:1.關鍵字if

else

switch

case

forwhile 之後要加空格 2.小括號內側不

能有空格 3.一元操作符緊貼變數,無空格,二元操作符兩側加空格 4.結構體成員操

作符. -> 前後不加空格

1.2 語句行

一行只寫一條語句

1.3 大括號

'}'必須獨佔一行,例外:if(...){}else{}與else放同一行 do{}while(...)與while放同一行
1.4 **行長度

每行**不應超過80列,注釋例外,字串例外。
第二章 注釋
2.0 總則

1.注釋重點闡明目的、模組/函式之間的關聯知識,並及時更新

2.注釋不應涉及無關內容,如"今天天氣很好"

2.1 宣告注釋

1.在檔案頭和原始檔注釋說明該其功能  2.在函式頭注釋其功能及引數、返回值的含義

3.全域性變數、常量、所有型別定義(如struct、class、enum 等)、巨集定義都要注釋說明其功能和用法。

第三章 識別符號
3.1 命名風格

1.全小寫加下劃線,如creat_file  2. 大小寫混排,如(creatfile)
3.2 命名要求

1.使用有意義的英文單詞命名,例如排序,用sort命名排序的函式

2.非靜態全域性變數用g_開頭,靜態全域性變數用s_開頭,類成員變數用m_開頭

3.3 檔名

使用include包含的檔名都使用小寫。
3.4 魔數

魔數:字面值形式出現的數值常量,例如 256、3.14、0.628。不允許使用0,1,-1之外的

魔數。1.一般return 返回值 0 代表正常 ,-1 代表錯誤 2.布林值1 表示真,0表示假

3.6 減少識別符號的作用域和可見性

只在本檔案編譯的全域性變數,必須宣告為靜態全域性變數;不被別的編譯單元訪問的函式,

必須加static宣告;只被派生類訪問的成員函式,必須宣告為protected函式。

3.7 函式宣告

函式宣告必須和函式定義的原型保持一致。
第四章 函式
4.1 函式規模

乙個函式不超過100行,工具自動生成除外。
4.2 函式引數

1.不允許函式引數使用布林型別  2. 函式引數不超過5個  3.函式引數中不得定義陣列引數,應用指標代替陣列
4.3 return 返回值

1.不要返回非靜態區域性變數的位址  2. linux平台,返回值為int/short/long時,<0表示出錯,>0 成功  3.布林型別只允許返回 true 或false
4.4 const使用

1.

const

char *p 表示不可通過p指標修改所指向的記憶體空間,char * const p 表示指標

本身不可修改

2.如果非靜態成員函式內部不修改普通成員變數,則必須宣告為const成員函式

第五章 巨集定義

5.1 命名

使用全大寫加下劃線方式命名。例:#define name_length 1024
5.2 括號使用

巨集定義表示式,用完備括號

例:#define max(a,b) ((a) > (b) ? (a) : (b))

5.3 巨集引數

例:不允許引數中出現***,例:使用max(++a,b+=2)
5.5 防名字衝突

巨集內部如果定義區域性變數,要防該變數與上下文中的變數名字衝突
第六章 結構體

6.1 結構體對齊

1.保證結構體至少4位元組對齊(考慮記憶體對齊問題),成員長度大於2偏移位置必須被2整除

,長度大於4偏移要被4整除

反例:#pargma push pack(1)

struct a

#pargma pop

2.跨程序結構體,要保證pack(1) 和pack(4)編譯後是一樣的的記憶體結構

技巧:結構體成員按成員的對齊數從大到小順序排序。

第七章

7.1 括號使用

必須使用括號明確表示式優先順序的情況:

1.同時出現&、^、|任意兩種,或每種運算子同時出現兩次

2.同時出現位運算子(& | ^)和比較符(> >= < <=)

3.同時出現&& 和 || ,同時出現移位運算子(>> <<)和比較運算子(> >= < <=)

4.同時出現位運算子(& ^ |)和算術運算子(+ - * / %)

5.同時出現移位運算子(>> <<)和算術運算子(+ - * / %)

7.2 goto使用限制

記住:goto只允許在同一塊作用域內跳轉或者跳轉到上層的塊作用域

例:if(ok)

goto ready;

func();

while(1)

此**不符合要求,因為goto跳轉到了更深的塊作用

7.4 不使用複雜的表示式

不使用複雜的表示式,運算子不巢狀。

例:*stat_poi++

+=1;應該拆成:*stat_poi

+=1;++

stat_poi;

7.5 switch/case語句

1. 每個case語句後必須加break結尾,不需要要在末尾注釋說明

2.必須要有default。

7.6 控制結構(if/for/while/switch等)的巢狀

迴圈巢狀不超過3層,總共不超過5層
第九章 資源管理

1.資源的分配和釋放必須配對

例:malloc/realloc/calloc分配的記憶體由free釋放

fopen/fdopen 分配的指標由fclose釋放

2.對標準輸入、輸出、標準錯誤輸出這三個檔案描述符,如果有必要關閉,必須將其重

新開啟。

第十章 記憶體

總結:

1.不使用memcmp比較兩結構體是否相等,不可修改常量字串。

2.字串結束後必須新增結束符'\0'。

3.不使用atoi,itoa讀取數字,除非對輸入合法性沒有要求。

第十一章 併發

1.長時間執行的linux程式必須處理訊號,必須處理或忽略的訊號有sigterm、,sigint,sigpipe,sigbus,sigsegv,sigabrt。

2.子程序終止後必須通過watpid/wait等待結束,避免殭屍程序的產生,而執行緒用pthread_jin等待結束或者用pthread_detach分離子執行緒。

3.互斥鎖使用前,必須對互斥鎖物件初始化或呼叫初始化函式

互斥鎖使用後,必須銷毀互斥鎖隊物件或結構體。

4.非遞迴鎖不用於遞迴函式,linux下的pthread_mutex預設是非遞迴鎖。

5.建立執行緒必須判斷並處理失敗情況

第十二章 危險的庫特性

不混用檔案機制:

1.標準c庫的檔案io(printf fprintf fseek fgets)

2.posix io (open ftruncate lseek)

3.c++ iostream (ostream istream fstream)

第十三章 危險的語言特性

1.不直接使用char型別的變數做陣列的索引。

2.void*型別的指標和其他型別的指標之間必須使用強制轉換。

3.移位運算的移位操作位數必須大於或等於0並小於自身的位數。

Google C 程式設計規範 筆記

我是vc入門,也相當最初是windows程式設計,google程式設計規範有他自己的特點,它強調 支援多平台,支援32 64位,不使用預設函式引數 不使用異常等 unicode編碼 utf8 函式引數順序 function parameter ordering 定義函式時,引數順序為 輸入引數在前,...

學習筆記 程式設計規範

參照這個文件 變數命名用英文小寫 禁用拼音 名詞或形容詞 名詞 類名和結構體名用駝峰 左值一定是可以改變的,右值一定是初始化過的 變數首次使用之前一定要初始化,初始化的地方離使用的地方越近越好。識別符號的命名要清晰 明了,有明確含義,同時使用完整的單詞或大家基本可以理解的縮寫,避免使人產生誤解 in...

谷歌C 程式設計規範筆記

新公司程式設計規範遵循google code style c 利用了點時間閱讀了一遍,將自認為重要的記錄下來。1使用 define包含 可以參考部落格 你所不知道的事兒 ifndef endif不能防止編譯器將檔案包含兩次 格式如下 例如,專案foo中的標頭檔案foo src bar baz.h,可...