四級上機編程修養
1、版權和版本
———————
好的程序員會給自己的每個函數,每個文件,都註上版權和版本。
對於C/C 的文件,文件頭應該有類似這樣的註釋:
/************************************************************************
*
* 文件名:network.c
*
* 文件描述:網絡通訊函數集
*
* 創建人: Hao Chen, 2003年2月3日
*
* 版本號:1.0
*
* 修改記錄:
*
*
************************************************************************/
而對於函數來説,應該也有類似於這樣的註釋:
/*================================================================
*
* 函 數 名:XXX
*
* 參 數:
*
* type name [IN] : descripts
*
* 功能描述:
*
* ..............
*
* 返 回 值:成功TRUE,失敗FALSE
*
* 拋出異常:
*
* 作 者:ChenHao 2003/4/2
*
*
================================================================*/
這樣的描述可以讓人對一個函數,一個文件有一個總體的認識,對代碼的易讀性和易維護
性有很大的好處。這是好的作品產生的開始。
2、縮進、空格、換行、空行、對齊
————————————————
i) 縮進應該是每個程序都會做的,只要學程序過程序就應該知道這個,但是我仍然看過不
縮進的程序,或是亂縮進的程序,如果你的公司還有寫程序不縮進的程序員,請毫不猶豫
的開除他吧,並以破壞源碼罪起訴他,還要他賠償讀過他程序的人的精神損失費。縮進,
這是不成文規矩,我再重提一下吧,一個縮進一般是一個TAB鍵或是4個空格。(最好用TAB
鍵)
ii) 空格。空格能給程序代來什麼損失嗎?沒有,有效的利用空格可以讓你的程序讀進來
更加賞心悦目。而不一堆表達式擠在一起。看看下面的代碼:
ha=(ha*128 *key )%tabPtr->size;
ha = ( ha * 128 *key ) % tabPtr->size;
有空格和沒有空格的感覺不一樣吧。一般來説,語句中要在各個操作符間加空格,函
數調用時,要以各個參數間加空格。如下面這種加空格的和不加的:
if ((hProc=OpenProcess(PROCESS_ALL_ACCESS,FALSE,pid))==NULL){
}
if ( ( hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid) ) == NULL ){
}
iii) 換行。不要把語句都寫在一行上,這樣很不好。如:
for(i=0;i
我拷,這種即無空格,又無換行的程序在寫什麼啊?加上空格和換行吧。
for ( i=0; i if ( ( a[i] < ’0’ || a[i] > ’9’ ) && ( a[i] < ’a’ || a[i] > ’z’ ) ) { break; } } 好多了吧?有時候,函數參數多的時候,最好也換行,如: CreateProcess( NULL, cmdbuf, NULL, NULL, bInhH, dwCrtFlags, envbuf, NULL, &siStartInfo, &prInfo ); 條件語句也應該在必要時換行: if ( ch >= ’0’ || ch <= ’9’ || ch >= ’a’ || ch <= ’z’ || ch >= ’A’ || ch <= ’Z’ ) iv) 空行。不要不加空行,空行可以區分不同的程序塊,程序塊間,最好加上空行。如: HANDLE hProcess; PROCESS_T procInfo; /* open the process handle */ if((hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid)) == NULL) { return LSE_MISC_SYS; } memset(&procInfo, 0, sizeof(procInfo)); oc = pid; oc = hProcess; |= MSC***A_PROC; return(0); v) 對齊。用TAB鍵對齊你的一些變量的聲明或註釋,一樣會讓你的程序好看一些。如: typedef struct _pt_man_t_ { int numProc; /* Number of processes */ int maxProc; /* Max Number of processes */ int maxProc; /* Max Number of processes */ int numEvnt; /* Number of events */ int maxEvnt; /* Max Number of events */ HANDLE* pHndEvnt; /* Array of events */ DWORD timeout; /* Time out interval */ HANDLE hPipe; /* Namedpipe */ TCHAR usr[MAXUSR];/* User name of the process */