C語言程式書寫規範 (轉)
我做C語言底層開發,積累了一些程式碼書寫的供大家參考:
1.C語言書寫規範
1.1符號命名規則
1.1.1符號名包括模組名、常量名、標號名、子名等。這些名字應該能反映它所代表的實際東西,具有一定的意義,使其能夠見名知義,有助於對程式功能的理解。命名採用匈牙利命名法。規則如下:
(1)所有宏定義、列舉常數和const變數,用大寫字母命名。在複合詞裡用下劃線隔開每個詞。
(2)複合詞中每個單詞的第一個字母大寫。除了規則5.1.1.1以外,避免使用下劃線。
(3)類、型別定義和列舉型名的第一個字母大寫。
(4)名是複合詞的,第一個詞采用全部小寫,隨後每個單詞采用第一個字母大寫,其它字母小寫方式;如果是單個詞的,採用全部小寫方式。
(5)迴圈變數可採用i, j, k等,不受上述規則限制。
(6) 類的成員變數應採用m_開頭。
(7) 全域性變數詞頭為g_ 。
(8) 臨時變數詞頭為tmp_ 。
(9) 對結構體內的變數命名, 遵循變數的具體含義命名原則
(10)用小寫字母的字首表示變數的型別,字首的下一個字母用大寫。
表 1
詞 頭 類 型 詞 頭 類 型
ch char l long
i integer u unsigned
b boolean p pointer
f float lp long pointer
d double s string
st structure sz ASCII string
by byte n short int
H handle x,y 分別為x,y座標
dw D fn function
表 2
詞 頭 變 量 名 詞 頭 變 量 名
task task sig signal
sb binary semaphores wd watchdog
sm mutual exclusion
semaphores tm timer
sc counting semaphores msg message
pipe pipe
例:
#define ARRAY_SIZE 24 /*規則5.1.1.1*/
int g_iFlag;
class MyClass /*規則5.1.1.3*/
{
};
void someFunc( ) /*規則5.1.1.2和5.1.1.4*/
{
.2.
Q/ECC/BJ 010—2001
int nArray[ARRAY_SIZE];
unsigned char uchByte;
char szName[ ];
char *pszName = szName;
}
(11)有些詞頭(如p和u)可以和其它詞頭組合。
例:WDOG_ID wdId;
WDOG_ID g_wdId; /*全域性watchdog Id,故以g_開頭*/
1.1.2名字的長度一般不要過長或過短。過長的名字會增加工作量,使程式邏輯流程變得模糊;過短的名字無法表達符號的實際意義。約定長度範圍:3-31;
1.2資料和函式說明
1.2.1資料說明次序應當規範化,使資料屬性容易查詢,也有利於測試、排錯和維護。說明的先後次序應固定,應按邏輯功能排序,邏輯功能塊內建議採用下列順序:整型說明、實型說明、字元說明、邏輯量說明。
1.2.2如果設計了一個複雜的資料結構,應當透過註釋對其變數的含義、用途進行說明。
1.2.3在函式的宣告中使用異常宣告。
如:void f() throw(toobig, toosmall, divzero);
在宣告一個函式時,將它所丟擲的異常列出,便於函式的使用者瞭解可能會發生哪些異常。
1.3 程式註釋
1.3.1程式註釋是程式設計師與日後的程式讀者之間通訊的重要手段之一,註釋分為註釋、函式註釋和功能註釋。
1.3.2正規程式的註釋應注意:
——註釋行的數量佔到整個源程式的1/3到1/2。
1.3.3檔案註釋位於整個源程式的最開始部分,註釋後空兩行開始程式正文。它包括:
——程式標題。
——目的、功能說明。
——檔案作者、最後修改日期等說明。
例:
./********************************************************************
(空一行)
標題: Demo.c
功能: 測試VxWorks的各種.
說明:
該程式測試各種VxWorks的系統呼叫函式。包括任務(taks)的建立、掛起及任務間透過訊號燈實現同步,透過訊息佇列進行通訊。
程式建立了兩個任務:一個高優先順序的任務和一個低優先順序的任務。兩個任務間透過一個二進位制的訊號燈進行同步,透過訊息佇列進行通訊。
當前版本: x.x
修改資訊: 2000.06.05 John, Initial Version
2000.07.05 Tom, xxxx fixed
**************************************************************/
(空2行,開始程式正文)
1.3.4 函式註釋通常置於每函式或過程的開頭部分,它應當給出函式或過程的整體說明對於理解程式本身具有引導作用。一般包括如下條目:
——模組標題。
——有關本模組功能和目的的說明。
——呼叫格式
——介面說明:包括輸入、輸出、返回值、異常。
——演算法。如果模組中採用了一些複雜的演算法。
例:
註釋開頭應和上一函式空兩行)
(註釋開頭與上一函式最後一行間隔兩行)
/********************************************************************
標題:assignmentComplete
功能:BSC=>MSC訊息生成函式,生成assignment_complete指配完成訊息(BSMAP訊息) .
格式:
int assignmentComplete(int iCellId, int iServiceChannnelNum, char *pszMSGData) throw(exception1, exception2)
輸入:
int iCellId: MS所在的小區識別
iCellId取值:0x00-——0xff .4.
Q/ECC/BJ 010—2001
int iServiceChannnelNum:MS所佔的業務通道號碼
輸出:
char * pszMSGData:指配完成訊息資料
返回值: 0x00正常
異常:exception1異常情況1, exception2異常情況2
********************************************************************/
( 註釋後直接開始程式正文,不空行。)
1.3.5功能性註釋嵌在源程式體中,用於描述其後的語句或程式段做什麼工作,也就是解釋下面要做什麼,或是了下面的語句會怎麼樣。而不要解釋下面怎麼做,因為解釋怎麼做常常與程式本身是重複的。
例:
/*把 amount 加到 total中*/
total = amount + total;
這樣的註釋僅僅是重複了下面的程式,對於理解它的工作並沒有什麼作用。而下面的註釋,有助於讀者理解。
/*將每月的銷售額amount加到年銷售額total中*/
total = amount + total;
1.4 函式編寫應儘可能短小精悍,一般不超過兩屏,以便於和理解。
1.5語句結構
為保證語句結構的清晰和程式的可讀性,在編寫程式時應注意以下幾個方面的問題:
——在一行內只寫一條語句,並採用空格、空行和移行保證清楚的視覺效果。
——每一個巢狀的函式塊,使用一個TAB縮排(可以設定為4個空格),大括號必須放在條件語句的下一行,單獨成一行,便於匹對:
如,有一段程式如下:
for(i=1;i
for( i=1; i
t=1;
for(j = i+1; j
if(a[i] t=j;
if(t!=1)
{ .5.
Q/ECC/BJ 010—2001
work=a[t];
a[t]=a[i];
a[i]=work;
}
}
}
——檔案之中不得存在無規則的空行,比如說連續十個空行。
一般來講函式與函式之間的空行為2-3行;
在函式體內部,在邏輯上獨立的兩個函式塊可適當空行,一般為1-2行。
——程式編寫首先應考慮清晰性,不要刻意追求技巧性而使得程式難以理解。
——每行長度儘量避免超過螢幕寬度,應不超過80個字元。
——除非對有特殊要求,編寫程式要作到清晰第一,效率第二。
——儘可能使用函式庫。
——儘量用公共過程或子程式去代替重複的功能程式碼段。要注意,這個程式碼應具有一個獨立的功能,不要只因程式碼形式一樣便將其抽出組成一個公共過程或子程式。
——使用括號清晰地表達算術和邏輯表示式的運算順序。如將 x=a*b/c*d 寫成 x=(a*b/c)*d可避免閱讀者誤解為x=(a*b)/(c*d)。
——避免不必要的轉移。
——避免採用過於複雜的條件測試。
——避免過多的迴圈巢狀和條件巢狀。
——建議不要使用 *=,^=, /=等運算子。
——一個函式不要超過200行。一個檔案應避免超過2000行。
——儘量避免使用go to語句。
——避免採用多賦值語句,如x = y = z ;
——不鼓勵採用?:運算子,如z = (a>b)?a:b;
——不要使用空的if else 語句。如
if(cMychar >= ‘A’)
if(cMychar <= ‘Z’)
printf(“This is a letter n”);
else
printf(“This is not a letter n”);
else到底是否定哪個if容易引起誤解。可透過加{}避免誤解。
——儘量減少使用“否定”條件的條件語句。如:
把 if( !( (cMychar’9’) ) )
改為if( (cMychar>=’0’) && (cMychar<=’9’) )
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1007857/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C語言程式設計規範——名稱縮寫C語言程式設計
- 程式碼書寫規範(Java) (轉)Java
- C語言程式設計基本規範C語言程式設計
- Delphi源程式格式書寫規範 (轉)
- C# 語言規範C#
- GNU的C++程式碼書寫規範,C語言之父Dennis Ritchie親自修訂 (轉)C++C語言
- 程式碼書寫規範
- HTML、CSS程式碼書寫規範HTMLCSS
- windows microsoft之c#語言規範WindowsROSC#
- css書寫規範CSS
- Markdown書寫規範
- Markdown 書寫規範
- Go 語言程式設計規範Go程式設計
- Android程式碼的書寫規範Android
- Java語言編碼規範(一) (轉)Java
- Java語言編碼規範(2)(轉)Java
- Java語言編碼規範(1)(轉)Java
- Java語言規範Java
- 嵌入式c語言編碼規範C語言
- PHP入門:書寫語法以及基本規範PHP
- css BEM書寫規範CSS
- SQL書寫規範(通用)SQL
- 讀寫硬碟扇區的C語言程式 (轉)硬碟C語言
- 電子書下載:C語言程式開發範例寶典C語言
- Python語言規範及風格規範Python
- css命名和書寫規範CSS
- css書寫和命名規範CSS
- html和css書寫規範HTMLCSS
- CSS 樣式書寫規範CSS
- CSS命名及書寫規範CSS
- C語言程式設計,初學者必學程式碼規範,你知道哪些?C語言程式設計
- Python PEP8程式碼書寫規範Python
- JavaScript-總結常用程式碼書寫規範JavaScript
- 程式設計書寫規則 (轉)程式設計
- Java語言編碼規範Java
- Go 語言程式碼風格規範-指南篇Go
- Go 語言程式碼風格規範-概述篇Go
- Android & Java 書寫簡潔規範的程式碼AndroidJava