亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 編程修養(二).txt

?? 《編程修養》對C/C++初學者是一個良好的習慣典范
?? TXT
字號:
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<len;i++) if((a[i]<'0'||a[i]>'9')&&(a[i]<'a'||a[i]>'z')) break; 
  
    我拷,這種即無空格,又無換行的程序在寫什么啊?加上空格和換行吧。 
  
    for ( i=0; i<len; 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)); 
    procInfo.idProc = pid; 
    procInfo.hdProc = hProcess; 
    procInfo.misc |= MSCAVA_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            */ 
    int     numMsg;     /* Number of Message                   */ 
    int     Msg[MAXMSG];/* Space for intro process communicate */ 
} PT_MAN_T; 
  
怎么樣?感覺不錯吧。 
  
這里主要講述了如果寫出讓人賞心悅目的代碼,好看的代碼會讓人的心情愉快,讀起代碼 
也就不累,工整、整潔的程序代碼,通常更讓人歡迎,也更讓人稱道。現在的硬盤空間這 
么大,不要讓你的代碼擠在一起,這樣它們會抱怨你虐待它們的。好了,用“縮進、空格 
、換行、空行、對齊”裝飾你的代碼吧,讓他們從沒有秩序的土匪中變成一排排整齊有秩 
序的正規部隊吧。 
  
  
  
  
3、程序注釋 
3、程序注釋 
—————— 
養成寫程序注釋的習慣,這是每個程序員所必須要做的工作。我看過那種幾千行,卻居然 
沒有一行注釋的程序。這就如同在公路上駕車卻沒有路標一樣。用不了多久,連自己都不 
知道自己的意圖了,還要花上幾倍的時間才看明白,這種浪費別人和自己的時間的人,是 
最為可恥的人。 
  
是的,你也許會說,你會寫注釋,真的嗎?注釋的書寫也能看出一個程序員的功底。一般 
來說你需要至少寫這些地方的注釋:文件的注釋、函數的注釋、變量的注釋、算法的注釋 
、功能塊的程序注釋。主要就是記錄你這段程序是干什么的?你的意圖是什么?你這個變 
量是用來做什么的?等等。 
  
不要以為注釋好寫,有一些算法是很難說或寫出來的,只能意會,我承認有這種情況的時 
候,但你也要寫出來,正好可以訓練一下自己的表達能力。而表達能力正是那種悶頭搞技 
術的技術人員最缺的,你有再高的技術,如果你表達能力不行,你的技術將不能得到充分 
的發揮。因為,這是一個團隊的時代。 
  
好了,說幾個注釋的技術細節: 
  
i) 對于行注釋(“//”)比塊注釋(“/* */”)要好的說法,我并不是很同意。因為一 
些老版本的C編譯器并不支持行注釋,所以為了你的程序的移植性,請你還是盡量使用塊注 
釋。 
  
  
ii) 你也許會為塊注釋的不能嵌套而不爽,那么你可以用預編譯來完成這個功能。使用“# 
if 0”和“#endif”括起來的代碼,將不被編譯,而且還可以嵌套。 
  
  
  
  
4、函數的[in][out]參數 
——————————— 
  
我經常看到這樣的程序: 
FuncName(char* str) 
{ 
    int len = strlen(str); 
    ..... 
} 
  
char* 
GetUserName(struct user* pUser) 
{ 
    return pUser->name; 
} 
  
  
不!請不要這樣做。 
你應該先判斷一下傳進來的那個指針是不是為空。如果傳進來的指針為空的話,那么,你 
的一個大的系統就會因為這一個小的函數而崩潰。一種更好的技術是使用斷言(assert) 
,這里我就不多說這些技術細節了。當然,如果是在C++中,引用要比指針好得多,但你也 
需要對各個參數進行檢查。 
  
寫有參數的函數時,首要工作,就是要對傳進來的所有參數進行合法性檢查。而對于傳出 
的參數也應該進行檢查,這個動作當然應該在函數的外部,也就是說,調用完一個函數后 
,應該對其傳出的值進行檢查。 
  
當然,檢查會浪費一點時間,但為了整個系統不至于出現“非法操作”或是“Core Dump” 
的系統級的錯誤,多花這點時間還是很值得的。 
  
  
  
  
5、對系統調用的返回進行判斷 
—————————————— 
繼續上一條,對于一些系統調用,比如打開文件,我經常看到,許多程序員對fopen返回的 
指針不做任何判斷,就直接使用了。然后發現文件的內容怎么也讀出不,或是怎么也寫不 
進去。還是判斷一下吧: 
  
  
    fp = fopen("log.txt", "a"); 
    if ( fp == NULL ){ 
        printf("Error: open file error\n"); 
        return FALSE; 
    } 
  
其它還有許多啦,比如:socket返回的socket號,malloc返回的內存。請對這些系統調用 
返回的東西進行判斷。 
 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91高清视频免费看| 精品在线一区二区| 亚洲色图.com| 91在线精品一区二区| 国产高清久久久久| 国产成人免费视频| 亚洲综合清纯丝袜自拍| 亚洲激情网站免费观看| 成人欧美一区二区三区白人| 亚洲国产成人91porn| 欧美在线免费观看视频| 国产999精品久久| 亚洲视频在线观看一区| 在线免费观看日本欧美| 色婷婷久久99综合精品jk白丝| caoporn国产精品| 91小视频免费看| 欧美日韩亚洲综合在线 | 色综合天天综合网国产成人综合天| 国产aⅴ综合色| 一本久道久久综合中文字幕| 欧美性受xxxx| 精品国产百合女同互慰| 国产精品国产三级国产a | 一区二区三区视频在线看| 亚洲一区二区三区四区在线免费观看| 亚洲国产精品嫩草影院| 精品一区二区综合| 99久久精品免费| 91精品国产日韩91久久久久久| 欧美成人一区二区三区片免费| 国产精品网站一区| 婷婷久久综合九色综合绿巨人| 精品无码三级在线观看视频| 成人晚上爱看视频| 国产欧美精品一区二区三区四区| 国产欧美一区二区在线| 亚洲第一二三四区| 国产精品一卡二卡| 欧美群妇大交群的观看方式| 国产午夜亚洲精品羞羞网站| 亚洲.国产.中文慕字在线| 狠狠色综合日日| 欧美日韩国产成人在线91| 久久综合给合久久狠狠狠97色69| 一区二区在线观看视频在线观看| 九九热在线视频观看这里只有精品| 91免费视频网址| 久久久高清一区二区三区| 亚洲国产一区二区a毛片| 成人亚洲精品久久久久软件| 7777精品久久久大香线蕉 | thepron国产精品| 久久亚洲春色中文字幕久久久| 一区二区三区在线观看国产 | 成人妖精视频yjsp地址| 欧美电影精品一区二区| 亚洲精品国久久99热| 国产成人在线色| 2020国产成人综合网| 午夜一区二区三区视频| 99久久精品费精品国产一区二区| 精品裸体舞一区二区三区| 日本va欧美va欧美va精品| 色综合天天综合给合国产| 中文字幕精品综合| 欧美日韩国产综合久久| 亚洲精品国产一区二区精华液| 成人在线视频一区二区| 欧美成人一级视频| 裸体健美xxxx欧美裸体表演| 欧美人妖巨大在线| 亚洲va韩国va欧美va精品| 欧美亚一区二区| 亚洲欧美区自拍先锋| 99久久国产免费看| 亚洲少妇屁股交4| eeuss影院一区二区三区 | 91农村精品一区二区在线| 国产日产欧美一区二区三区| 狠狠色狠狠色综合系列| 欧美精品一区二区三区很污很色的| 久草在线在线精品观看| 欧美精品一区二区精品网| 韩国成人在线视频| 日本一区二区免费在线观看视频 | 国产精品综合二区| 日韩欧美在线不卡| 国产丶欧美丶日本不卡视频| 国产三级久久久| 色综合久久中文综合久久牛| 亚洲图片欧美色图| 日韩丝袜美女视频| 国产成人av电影在线观看| ㊣最新国产の精品bt伙计久久| 97久久久精品综合88久久| 一区二区三区视频在线看| 欧美一区二区免费| 波多野结衣亚洲| 亚洲成av人影院| 久久久精品免费免费| av综合在线播放| 五月激情丁香一区二区三区| 欧美va在线播放| 国产91在线观看| 午夜久久久久久| 国产人久久人人人人爽| 欧美综合在线视频| 久久国产精品区| 亚洲女与黑人做爰| 日韩欧美三级在线| 99久久99久久久精品齐齐| 免费精品视频在线| 1000精品久久久久久久久| 91精品国产高清一区二区三区| 国产999精品久久久久久绿帽| 一区二区在线免费观看| 久久久影院官网| 欧美精品亚洲一区二区在线播放| 豆国产96在线|亚洲| 琪琪久久久久日韩精品| 亚洲视频在线观看三级| 久久久久久久久久美女| 欧美日韩在线精品一区二区三区激情 | 国产精品美女一区二区| 欧美一区中文字幕| 在线观看亚洲a| 成人综合在线观看| 蜜桃视频一区二区| 亚洲二区在线观看| 国产精品久久久久久久久图文区| 欧美成人一区二区三区在线观看| 91久久线看在观草草青青| 国产高清不卡二三区| 日韩成人免费看| 亚洲一区影音先锋| 国产精品进线69影院| 国产日韩欧美精品综合| 日韩欧美久久一区| 制服丝袜中文字幕一区| 欧美性猛交xxxx乱大交退制版| 97成人超碰视| 成人免费av资源| 国产成人自拍高清视频在线免费播放| 日韩av高清在线观看| 手机精品视频在线观看| 亚洲电影一级黄| 夜夜精品浪潮av一区二区三区| 亚洲日韩欧美一区二区在线| 国产精品久久久久永久免费观看| 久久先锋资源网| 国产亚洲欧美色| 亚洲国产电影在线观看| 欧美激情综合在线| 国产精品不卡一区| 亚洲欧美经典视频| 亚洲国产精品嫩草影院| 天天色天天爱天天射综合| 午夜av区久久| 久久精品国产亚洲5555| 精品夜夜嗨av一区二区三区| 激情另类小说区图片区视频区| 久久成人麻豆午夜电影| 国产精品一区二区不卡| 成人白浆超碰人人人人| 91小视频在线| 欧美亚洲一区三区| 日韩视频一区二区| 久久久精品tv| 亚洲视频一区二区在线| 亚洲高清免费视频| 久久99久久99| 成人精品小蝌蚪| 欧美少妇一区二区| 欧美成人精品二区三区99精品| 久久这里只精品最新地址| 国产精品久久久久久久裸模| 夜夜操天天操亚洲| 精品一区二区在线免费观看| 成人精品视频网站| 欧美日韩五月天| 精品国产乱码久久久久久图片| 中文字幕欧美国产| 亚洲国产精品综合小说图片区| 日韩av不卡在线观看| 高清免费成人av| 欧美午夜宅男影院| 国产亚洲精品福利| 天堂成人国产精品一区| 国产白丝精品91爽爽久久| 欧美视频在线不卡| 久久久影视传媒| 亚洲国产一区二区三区青草影视| 国产在线视视频有精品| 欧美在线不卡一区| 国产精品视频一区二区三区不卡| 性做久久久久久| 91小视频免费看| 久久久久久夜精品精品免费| 亚洲成人资源网|