<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. 等級考試

    四級上機編程修養

    時間:2025-02-01 21:29:39 等級考試 我要投稿
    • 相關推薦

    四級上機編程修養

      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’9’)&&(a[i]<’a’||a[i]>’z’)) break;

      我拷,這種即無空格,又無換行的程序在寫什么啊?加上空格和換行吧。

      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));

      procInfo.idProc = pid;

      procInfo.hdProc = hProcess;

      procInfo.misc |= 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 */

      int numMsg; /* Number of Message */

      int Msg[MAXMSG];/* Space for intro process communicate */

      } PT_MAN_T;

      怎么樣?感覺不錯吧。

      這里主要講述了如果寫出讓人賞心悅目的代碼,好看的代碼會讓人的心情愉快,讀起代碼

      也就不累,工整、整潔的程序代碼,通常更讓人歡迎,也更讓人稱道。現在的硬盤空間這

      么大,不要讓你的代碼擠在一起,這樣它們會抱怨你虐待它們的。好了,用“縮進、空格

      、換行、空行、對齊”裝飾你的代碼吧,讓他們從沒有秩序的土匪中變成一排排整齊有秩

      序的正規部隊吧。

      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返回的內存。請對這些系統調用

      返回的東西進行判斷。

      1、版權和版本

      ———————

      好的程序員會給自己的每個函數,每個文件,都注上版權和版本。

      對于C/C 的文件,文件頭應該有類似這樣的注釋:

      /************************************************************************

      *

      * 文件名:network.c

      *

      * 文件描述:網絡通訊函數集

      *

      * 創建人: Hao Chen, 2003年2月3日

      *

      * 版本號:1.0

      *

      * 修改記錄:

      *

      *

      ************************************************************************/

      而對于函數來說,應該也有類似于這樣的注釋:

      /*================================================================

      *

      * 函 數 名:XXX

      *

      * 參 數:

      *

      * type name [IN] : descripts

      *

      * 功能描述:

      *

      * ..............

      *

      * 返 回 值:成功TRUE,失敗FALSE

      *

      * 拋出異常:

      *

      * 作 者:ChenHao 2003/4/2

      *

      *

     


    相關推薦:
    科目三路考起步須知
    2013年駕照考試新規定
    駕照考試題100道
    機動車駕駛員科目二倒樁技巧
    科目二考試介紹
    c1駕照考試科目二



    【四級上機編程修養】相關文章:

    2016年計算機四級上機編程題型10-01

    2017計算機等級考試四級上機編程題練習10-13

    全國計算機等級考試四級上機編程題07-11

    全國計算機等級考試四級上機編程題型09-15

    2016年計算機考試四級上機編程題型08-21

    2016年計算機等級考試四級上機編程試題及答案08-30

    2016年全國計算機等級考試四級上機編程題型07-08

    全國計算機等級考試四級上機編程題訓練201709-08

    2017年C語言上機編程題練習06-21

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人