C語言編碼規範——着重注意點整理

C語言編碼規範——着重注意點整理

編碼規範的目的:

保證不同背景和經歷的開發同學可以良好的協同開發

保證組織級的開發技能和經驗得以共享和傳承


編程最難的是命名!因爲其他的算法、數據結構都有據可循。

命名完全體現了程序的可閱讀性和可理解性。

1、 變量命名規範

(1)   變量命名

以字母或下劃線開頭,大小寫字母和下劃線交錯命名。

(2)   前綴

靜態變量 s_
全局變量 g_
指針變量 p_
無符號   u_
數組     a_
函數指針 pf_
枚舉變量 en_
結構體   st_
VOID     v_
32位系統下:
  signed int縮寫爲INT或者INT32

unsigned int縮寫爲UINT或者UINT32。

BOOL b_XXX;

CHAR c_XXX;
UCHAR uc_XXX;

SHORT  s_XXX;
USHORT us_XXX;

INT i_XXX;
UINT ui_XXX;

LONG l_XXX;
ULONG ul_XXX;

2、 宏定義

宏定義的命名:字母全部大寫並以下劃線進行分割。

宏定義是預處理時進行簡單的字符替換。

宏定義沒有類型,而且宏定義不分配內存

3、 類型後綴

結構體以_S結尾:

typedef struct XXX
{
    ....
}XXX_S;

附:結構的封裝一定要合理,好好利用字節對齊問題,減少空間的浪費。

枚舉以_E結尾:

typedef enum XXX
{
    ....
}XXX_E;

聯合體以_U結尾:

typedef union XXX
{
    ....
}XXX_U;

函數指針以_PF結尾。

4、 函數

命名規範:模塊名_功能(模塊字母大寫,功能字母大小寫交錯)

函數入參可以加上IN/OUT/INOUT。

注意:

函數務必檢查入參的合法性

儘量設計高扇入、合理扇出(<7)的函數。

(扇出即是調用其他函數的個數,扇入即被調用次數)

5、 文件名

文件名全小寫,命名規範“模塊名_功能名.文件後綴”

6、 換行/命名的縮寫/代碼對齊/字符間空白

7、 註釋

只能使用/* */。

8、 日誌打印

(1)   打印什麼?

基本包括文件名、函數名、行號、錯誤原因、變量值等。

(2)   日誌分級

DEBUG/TRACE——精確記錄一些用於調試的log。

INFO——一般記錄正常運行流程和狀態記錄。

WARN——警告,可能會出現問題的地方。

ERROR/FATAL——重點記錄的錯誤,詳細記錄失敗的場景、失敗原因、一些關鍵變量值等。

9、 其他——編碼安全注意點及編碼效率

(1)   編碼效率:全局效率、局部效率、時間效率、空間效率

注意編程中的時間和空間轉換的問題,以此提高效率。

(2)   禁止使用goto語句。

(3)   If else語句的嵌套儘量不超過三層。

(4)   儘量避免循環中continue、break的一起使用問題。

(5)   務必進行入參檢查和申請內存的變量的釋放問題。

指針的操作:

#使用前,進行合法性檢查
ptr = malloc(size);
if(NULL == ptr)
{
    //處理語句;
}
else
{   
    //處理語句;
}
#使用完指針ptr,進行釋放和指針置空
free(ptr);
ptr = NULL;
指針使用前,進行合法性檢查(判空處理),指針使用後,釋放申請的空間且指針置空。

(6)   代碼複雜度的度量和控制,提高軟件的可維護性。

(7)    減少CPU的切換次數,將最忙的循環放在內層。

(8)    循環中,合理放置判斷語句,減少判斷次數。

(9)    判斷風格,if(value == variable),if(NULL == ptr)

務必注意:判斷是否可能恆爲真、恆爲假的問題!!!

(10)避免類型的隱式轉換,全部進行顯示類型轉換。

(11)圈複雜度一般控制在<10,必須<15。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章