必胜高考网_全国高考备考和志愿填报信息平台

必勝高考網 > 計算機類 > 計算機等級 > 資訊 >

計算機等級考試四級上機編程修養(中)

時間: 家輝2 資訊

  *

  * 文件名: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;

  怎么樣?感覺不錯吧。

  這里主要講述了如果寫出讓人賞心悅目的代碼,好看的代碼會讓人的心情愉快,讀起代碼也就不累,工整、整潔的程序代碼,通常更讓人歡迎,也更讓人稱道。現在的硬盤空間這么大,不要讓你的代碼擠在一起,這樣它們會抱怨你虐待它們的。好了,用“縮進、空格、換行、空行、對齊”裝飾你的代碼吧,讓他們從沒有秩序的土匪中變成一排排整齊有秩序的正規部隊吧。

  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返回的內存。請對這些系統調用返回的東西進行判斷。

55479 主站蜘蛛池模板: 油缸定制-液压油缸厂家-无锡大鸿液压气动成套有限公司 | 超声波反应釜【百科】-以马内利仪器 | 杭州代理记账费用-公司注销需要多久-公司变更监事_杭州福道财务管理咨询有限公司 | 瑞典Blueair空气净化器租赁服务中心-专注新装修办公室除醛去异味服务! | 模具钢_高速钢_不锈钢-万利钢金属材料 | 昊宇水工|河北昊宇水工机械工程有限公司 | 校园文化空间设计-数字化|中医文化空间设计-党建|法治廉政主题文化空间施工-山东锐尚文化传播公司 | 精密五金加工厂-CNC数控车床加工_冲压件|蜗杆|螺杆加工「新锦泰」 | 台湾Apex减速机_APEX行星减速机_台湾精锐减速机厂家代理【现货】-杭州摩森机电 | 耐驰泵阀管件制造-耐驰泵阀科技(天津)有限公司 | 烟台游艇培训,威海游艇培训-烟台市邮轮游艇行业协会 | 膜结构车棚|上海膜结构车棚|上海车棚厂家|上海膜结构公司 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 刺绳_刀片刺网_刺丝滚笼_不锈钢刺绳生产厂家_安平县浩荣金属丝网制品有限公司-安平县浩荣金属丝网制品有限公司 | 大倾角皮带机-皮带输送机-螺旋输送机-矿用皮带输送机价格厂家-河南坤威机械 | 行吊_电动单梁起重机_双梁起重机_合肥起重机_厂家_合肥市神雕起重机械有限公司 | 直读光谱仪,光谱分析仪,手持式光谱仪,碳硫分析仪,创想仪器官网 | 钢托盘,钢制托盘,立库钢托盘,金属托盘制造商_南京飞天金属制品实业有限公司 | 杭州成人高考_浙江省成人高考网上报名 | 一体化隔油提升设备-餐饮油水分离器-餐厨垃圾处理设备-隔油池-盐城金球环保产业发展有限公司 | 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 山东聚盛新型材料有限公司-纳米防腐隔热彩铝板和纳米防腐隔热板以及钛锡板、PVDF氟膜板供应商 | 博博会2021_中国博物馆及相关产品与技术博览会【博博会】 | 网站建设_网站制作_SEO优化推广_百度推广开户_朋友圈网络科技 | 塑料薄膜_PP薄膜_聚乙烯薄膜-常州市鑫美新材料包装厂 | 河南道路标志牌_交通路标牌_交通标志牌厂家-郑州路畅交通 | 小型玉石雕刻机_家用玉雕机_小型万能雕刻机_凡刻雕刻机官网 | 短信通106短信接口验证码接口群发平台_国际短信接口验证码接口群发平台-速度网络有限公司 | 连续密炼机_双转子连续密炼机_连续式密炼机-南京永睿机械制造有限公司 | 重庆监控_电子围栏设备安装公司_门禁停车场管理系统-劲浪科技公司 | 常州企业采购平台_常州MRO采购公司_常州米孚机电设备有限公司 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库 | 汽车水泵_汽车水泵厂家-瑞安市骏迪汽车配件有限公司 | 压缩空气检测_气体_水质找上海京工-服务专业、价格合理 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 航空障碍灯_高中低光强航空障碍灯_民航许可认证航空警示灯厂家-东莞市天翔航天科技有限公司 | 苏州伊诺尔拆除公司_专业酒店厂房拆除_商场学校拆除_办公楼房屋拆除_家工装拆除拆旧 | 江西高职单独招生-江西单招考试-江西高职单招网 | 杭州营业执照代办-公司变更价格-许可证办理流程_杭州福道财务管理咨询有限公司 | 物流公司电话|附近物流公司电话上门取货 | 药品仓库用除湿机-变电站用防爆空调-油漆房用防爆空调-杭州特奥环保科技有限公司 |