1.標識符名稱:
標識符名稱包括函數名、常量名、變量名等。這些名字應該能反映它所代表的實際東西,具有一定的意義,使其能 夠見名知義,有助於對程序功能的理解。規則如下:
- 所有宏定義、枚舉常數和const常變量,用大寫字母命名。 #define ARRAY_SIZE 24
- 復合詞中每個單詞的第一個字母大寫。也可以在復合詞可以用下划線隔開每個詞。SeqList locate_seq
-
typedef定義的類型名用大寫字母表示。
typedef int INTEGER; -
通常,函數的命名也是以能表達函數的動作意義為原則的,一般是由動詞打頭,然后跟上表示動作對象的名詞,各單詞的首學母可以大寫。createNulList_seq
-
循環變量可采用i,j,k等,不受上述規則限制
-
對結構體內的變量命名,遵循變量的具體含義命名原則
2.數據和函數說明:
- 數據說明次序應當規范化,使數據屬性容易查找,也有利於測試、排錯和維護。說明的先后次序應固定,應按邏輯功能排序,邏輯功能塊內建議采用下列順序:整型說明、實型說明、字符說明、邏輯量說明。
- 如果設計了一個復雜的數據結構,應當通過注釋對其變量的含義、用途進行說明
3.程序注釋:
程序注釋是程序員與日后的程序讀者之間通信的重要手段之一,注釋分為文件注釋、函數注釋和功能注釋。正規程序的注釋應注意:注釋行的數量占到整個源程序的1/3到1/2。
文件注釋位於整個源程序的最開始部分,注釋后空兩行開始程序正文。它包括:
——程序標題。
——目的、功能說明。
——文件作者、最后修改日期等說明。
3.1文件注釋:
例: /************************************************************** (空一行) 標題:merglist.c 功能:歸並兩個有序表. 說明: 歸並兩個數據元素按非遞減有序排列的線性表palist和pblist,求得線性表pclist也具有同樣的特性 當前版本:X.x 修改信息:2004.08.05 Anni,Initial Version 2004.08.20 Tom,Bug xxxx fixed **************************來關**********************************/ (空2行,開始程序正文)
3.2函數注釋:
函數注釋通常置於每函數或過程的開頭部分,它應當給出函數或過程的整體說明,對於理解程序本身具有引導作用。一般包括如下條目:
——模塊標題。
——有關本模塊功能和目的的說明。
——調用格式
——接口說明:包括輸入、輸出、返回值、異常。
——算法。如果模塊中采用了一些復雜的算法。
函數注釋示例:
(注釋開頭與上一函數最后一行間隔兩行) /*************************************************************** 標題:delete_seq 功能:在palist所指順序表中刪除下標為p的元素 格式:int delete_seq(PSeqList palist,intp) 輸入:palist所指順序表,下標p 輸出:palist所指順序表 返回值:TRUE正常,FALSE錯誤 ***************************************************************/ (注釋后直接開始程序正文,不空行。)
3.3功能性注釋
功能性注釋嵌在源程序體中,用於描述其后的語句或程序段做什么工作,也就是解釋下面要做什么,或是執行了下面的語句會怎么樣。而不要解釋下面怎么做,因為解釋怎么做常常與程序本身是重復的。
例:
/*把 amount 加到total中*/ total=amount +total;
這樣的注釋僅僅是重復了下面的程序,對於理解它的工作並沒有什么作用。而下面的注釋,有助於讀者理解。
/*將每月的銷售額amount加到年銷售額total中*/ 材total=amount +total;
4.語句結構
為保證語句結構的清晰和程序的可讀性,在編寫軟件程序時應注意以下幾個方面的問題:
- 在一行內只寫一條語句,並采用空格、空行和移行保證清楚的視覺效果。
- 每一個嵌套的函數塊,使用一個TAB縮進(可以設定為4個空格),大括號必須放在條件語句的下一行,單獨成一行,便於匹對:
- 文件之中不得存在無規則的空行,比如說連續十個空行。
一般來講函數與函數之間的空行為2-3行;在函數體內部,在邏輯上獨立的兩個函數塊可適當空行,一般為1-2行。
- 程序編寫首先應考慮清晰性,不要刻意追求技巧性而使得程序難以理解。
- 每行長度盡量避免超過屏幕寬度,應不超過80個字符。
- 除非對效率有特殊要求,編寫程序要作到清晰第一,效率第二。
- 盡可能使用函數庫。
- 盡量用公共過程或子程序去代替重復的功能代碼段。
- 使用括號清晰地表達算術表達式和邏輯表達式的運算順序。如將x=a*b/c*d 寫成x=(a*b/c)*d可避免閱讀者誤解為x=(a*b)/(c*d)。
- 避免采用過於復雜的條件測試。
- 避免過多的循環嵌套和條件嵌套。
- 建議不要使用*=,A=,/=等運算符。
- 一個函數不要超過200行。一個文件應避免超過2000行。
- 盡量避免使用go to語句。
- 不鼓勵采用?:操作符,如z=(a>b)?a:b;
- 不要使用空的if else語句。如
if(mychar >= ‘A’) if(mychar <= ‘Z’) printf("This is a letter\n"); else printf(“This is not a letter\n");
else到底是否定哪個if容易引起誤解。可通過加{}避免誤解。
-
盡量減少使用“否定”條件的條件語句。如:
把 if(!((mychar<'0’)||(mychar>'9)))
改為if((mychar>='0)&&(mychar<='9))