天天看點

c語言程式設計規範--辨別符命名與定義

一、通用命名規則

1.0 選擇命名風格

說明:實際上,各種風格都有其優勢也有其劣勢,而且往往和個人的審美觀有關。我們對辨別符定義主要是為了讓代碼看起來盡可能統一,有利于代碼的後續閱讀和修改。下面是主要的命名風格介紹。

下劃線法:單詞用小寫字母,每個單詞直接用下劃線„_‟分割,例如

int error_number;  
int number_of_completed_connection; 
           

駝峰命名法:大小寫字母混用,單詞連在一起,例如:

小駝峰式命名法,第一個單字以小寫字母開始,第二個單字的首字母大寫:

大駝峰式命名法,每一個單字的首字母都采用大寫字母:

但是,駝峰命名法如果遇到大寫專有用語時會有些别扭,例如命名一個讀取RFC文本的函數:

指令為 “ReadRFCText” ,看起來就沒有下劃線法的 “read_rfc_text” 清晰。

匈牙利命名法:變量名=屬性+類型+對象描述

其中每一對象的名稱都要求有明确含義,可以取對象名字全稱或名字的一部分。

要基于容易記憶容易了解的原則。保證名字的連貫性是非常重要的。例如:

h 是類型描述,表示句柄, wnd 是變量對象描述,表示視窗,是以 hwnd 表示視窗句柄:

pfn 是類型描述,表示指向函數的指針, EatApple 是變量對象描述,是以它表示指向 EatApple 函數的函數指針變量:

int pfnEatApple;
           

匈牙利命名法的具體使用方法這裡不說明,但是個人認為不建議使用,因為會使内容難以了解,不友善閱讀。

1.1 辨別符的命名要清晰明了,有明确含義。

說明:命名使用完整的單詞或大家基本可以了解的縮寫,避免使人産生誤解。盡可能給出描述性名稱,不要節約空間,讓别人很快了解你的代碼更重要。

好的命名:

int error_number;  
int number_of_completed_connection;
           

不好的命名:使用模糊的縮寫或随意的字元

int n;  
int nerr;  
int n_comp_conns;  
           
1.2 除了常見的通用縮寫以外,不使用單詞縮寫,不得使用漢語拼音。

說明:較短的單詞可通過去掉“元音”形成縮寫,較長的單詞可取單詞的頭幾個字母形成縮寫,一些單詞有大家公認的縮寫,常用單詞的縮寫必須統一。

協定中的單詞的縮寫與協定保持一緻。對于某個系統使用的專用縮寫應該在注視或者某處做統一說明。

示例:一些常見可以縮寫的例子

argument 可縮寫為 arg

buffer 可縮寫為 buff

clock 可縮寫為 clk

command 可縮寫為 cmd

compare 可縮寫為 cmp

configuration 可縮寫為 cfg

device 可縮寫為 dev

error 可縮寫為 err

hexadecimal 可縮寫為 hex

increment 可縮寫為 inc、

initialize 可縮寫為 init

maximum 可縮寫為 max

message 可縮寫為 msg

minimum 可縮寫為 min

parameter 可縮寫為 para

previous 可縮寫為 prev

register 可縮寫為 reg

semaphore 可縮寫為 sem

statistic 可縮寫為 stat

synchronize 可縮寫為 sync

temp 可縮寫為 tmp

1.3 用正确的反義詞組命名具有互斥意義的變量或相反動作的函數等。

示例:

add / remove

begin / end

create / destroy

insert / delete

first / last

get / release

increment /decrement

put / get

add / delete

lock / unlock

open / close

min / max

old / new

start / stop

next / previous

source / target

show / hide

send / receive

source / destination

copy / paste

up / down

1.4 盡量避免名字中出現數字編号,除非邏輯上的确需要編号。

如下命名,使人産生疑惑。

#define EXAMPLE_0_TEST_ 
#define EXAMPLE_1_TEST_ 
           

應改為有意義的單詞命名

#define EXAMPLE_UNIT_TEST_ 
#define EXAMPLE_ASSERT_TEST_ 
           
1.5 檔案命名統一采用小寫字元。

說明:因為不同系統對檔案名大小寫處理會不同(如MS的DOS、Windows系統不區分大小寫,但是Linux

系統則區分),是以代碼檔案命名建議統一采用全小寫字母命名。

二、變量命名規則

2.0 全局變量應增加“g_”字首,靜态變量應增加“s_”字首。

說明:增加g_字首或者s_字首,原因如下:

首先,全局變量十分危險,通過字首使得全局變量更加醒目,促使開發人員對這些變量的使用更加小心。

其次,從根本上說,應當盡量不使用全局變量,增加g_和s_字首,會使得全局變量的名字顯得很醜陋,進而促使開發人員盡量少使用全局變量。

2.1 禁止使用單位元組命名變量,但允許定義i、j、k作為局部循環變量。
2.2 使用名詞或者形容詞+名詞方式命名變量。
2.3 不建議使用匈牙利命名法。

說明:變量命名需要說明的是變量的含義,而不是變量的類型。在變量命名前增加類型說明,反而降低了變量的可讀性;更麻煩的問題是,如果修改了變量的類型定義,那麼所有使用該變量的地方都需要修改。

匈牙利命名法源于微軟,然而卻被很多人以訛傳訛的使用。而現在即使是微軟也不再推薦使用匈牙利命名法。曆來對匈牙利命名法的一大诟病,就是導緻了變量名難以閱讀。也是以,變量命名不應采用匈牙利命名法,而應想法使變量名為一個有意義的詞或詞組,友善代碼的閱讀。

三、函數命名規則

3.0 函數命名應以函數要執行的動作命名,一般采用動詞或者動詞+名詞的結構。

示例:找到目前程序的目前目錄的函數命名

由Get + Current + Directory 組成

3.1 函數指針除了字首,其他按照函數的命名規則命名。

四、宏的命名規則

4.0 對于數值或者字元串等等常量的定義,建議采用全大寫字母,單詞之間加下劃線“_”的方式命名(枚舉同樣建議使用此方式定義)。

示例:

4.0 除了頭檔案或編譯開關等特殊辨別定義,宏定義不能使用下劃線“_”開頭和結尾。

說明:一般來說,"_"開頭、結尾的宏都是一些内部的定義。

繼續閱讀