国产精品一久久香蕉产线看-国产精品一区在线播放-国产精品自线在线播放-国产毛片久久国产-一级视频在线-一级视频在线观看免费

C語言函數設計的一般原則和技巧

時間:2022-07-03 03:27:22 輔助設計與工程計算 我要投稿
  • 相關推薦

C語言函數設計的一般原則和技巧

  C語言之所以命名為C,是因為 C語言源自Ken Thompson發明的B語言,而 B語言則源自BCPL語言。下面小編給大家介紹C語言函數設計的一般原則和技巧,歡迎閱讀!

  C語言函數設計的一般原則和技巧

  1、原則上盡量少使用全局變量,因為全局變量的生命周期太長,容易出錯,也會長時間占用空間.各個源文件負責本身文件的全局變量,同時提供一對對外函數,方便其它函數使用該函數來訪問變量。

  比如:niSet_ValueName(…);niGet_ValueName(…);不要直接讀寫全局變量,尤其是在多線程編程時,必須使用這種方式,并且對讀寫操作加鎖。

  2、參數命名要恰當,順序要合理。

  例如編寫字符串拷貝函數str_copy,它有兩個參數。如果把參數名字起為str1 和str2,例如

  void str_copy (char *str1, char *str2);

  那么我們很難搞清楚究竟是把str1 拷貝到str2 中,還是剛好倒過來。

  可以把參數名字起得更有意義,如叫strSource 和strDestination。這樣從名字上就可以看出應該把strSource 拷貝到strDestination。

  還有一個問題,這兩個參數那一個該在前那一個該在后?參數的順序要遵循程序員的習慣。一般地,應將目的參數放在前面,源參數放在后面。如果將函數聲明為:

  void str_copy (char *strSource, char *strDestination);

  別人在使用時可能會不假思索地寫成如下形式:

  char str[20];

  str_copy (str, “Hello World”); 參數順序顛倒

  3、如果參數是指針,且僅作輸入參數用,則應在類型前加const,以防止該指針在函數體內被意外修改。例如:

  void str_copy (char *strDestination,const char *strSource);

  4、不要省略返回值的類型,如果函數沒有返回值,那么應聲明為void 類型。

  如果沒有返回值,編譯器則默認為函數的返回值是int類型的。

  5、在函數體的“入口處”,對參數的有效性進行檢查。尤其是指針參數,盡量使用assert宏做入口校驗,而不使用if語句校驗。(關于此問題討論,詳見指針與數組那章。)

  6、return 語句不可返回指向“棧內存”的“指針”,因為該內存在函數體結束時被自動銷毀。例如:

  char * Func(void)

  {

  char str[30];

  …

  return str;

  }

  str 屬于局部變量,位于棧內存中,在Func 結束的時候被釋放,所以返回str 將導致錯誤。

  7、函數的功能要單一,不要設計多用途的函數。微軟的Win32 API就是違反本規則的典型,其函數往往因為參數不一樣而功能不一,導致很多初學者迷惑。

  8、函數體的規模要小,盡量控制在80 行代碼之內。

  9、相同的輸入應當產生相同的輸出。盡量避免函數帶有“記憶”功能。

  帶有“記憶”功能的函數,其行為可能是不可預測的,因為它的行為可能取決于某種“記憶狀態“。這樣的函數既不易理解又不利于測試和維護。在C 語言中,函數的static局部變量是函數的'“記憶”存儲器。建議盡量少用static 局部變量,除非必需。

  10、避免函數有太多的參數,參數個數盡量控制在4個或4個以內。如果參數太多,在使用時容易將參數類型或順序搞錯。微軟的Win32 API就是違反本規則的典型,其函數的參數往往七八個甚至十余個。比如一個CreateWindow函數的參數就達11個之多。

  11、盡量不要使用類型和數目不確定的參數。

  C 標準庫函數printf 是采用不確定參數的典型代表,其原型為:

  int printf(const chat *format[, argument]…);

  這種風格的函數在編譯時喪失了嚴格的類型安全檢查。

  12、有時候函數不需要返回值,但為了增加靈活性如支持鏈式表達,可以附加返回值。例如字符串拷貝函數strcpy 的原型:

  char *strcpy(char *strDest,const char *strSrc);

  strcpy 函數將strSrc 拷貝至輸出參數strDest 中,同時函數的返回值又是strDest。這樣做并非多此一舉,可以獲得如下靈活性:

  char str[20];

  int length = strlen(strcpy(str, “Hello World”) );

  13、不僅要檢查輸入參數的有效性,還要檢查通過其它途徑進入函數體內的變量的有效性,例如全局變量、文件句柄等。

  14、函數名與返回值類型在語義上不可沖突。

  違反這條規則的典型代表就是C語言標準庫函數getchar。幾乎沒有一部名著沒有提到getchar函數,因為它實在太經典,太容易讓人犯錯誤了。所以,每一個有經驗的作者都會拿這個例子來警示他的讀者,我這里也是如此:

  char c;

  c = get);

  if(EOF == c)

  {

  …

  }

  按照getchar 名字的意思,應該將變量c 定義為char 類型。但是很不幸,getchar 函數的返回值卻是int 類型,其原型為:

  int getvoid);

  由于c 是char 類型的,取值范圍是[-128,127],如果宏EOF 的值在char 的取值范圍之外,EOF 的值將無法全部保存到c 內,會發生截斷,將EOF 值的低8 位保存到c 里。這樣if 語句有可能總是失敗。這種潛在的危險,如果不是犯過一次錯,肯怕很難發現。

【C語言函數設計的一般原則和技巧】相關文章:

C語言函數的實驗報告07-02

課堂聽課的技巧和原則06-22

關于贊美的原則和技巧04-21

《設計的一般原則(二)》優秀說課稿07-03

c語言課程設計設計報告07-03

c語言程序設計心得05-19

c語言課程設計心得06-16

c語言程序設計實踐報告07-02

華為面試c語言一般都是哪些方面?07-11

物理分區和電氣分區設計原則07-01

主站蜘蛛池模板: 91久久人澡人人添人人爽 | 成人免费一区二区三区在线观看 | 在线播放你懂得 | 精品在线免费播放 | 手机日韩看片 | 色综合久久加勒比高清88 | 一区二区精品久久 | 福利在线免费视频 | 青青网视频 | 欧美视频在线观看免费 | 在线观看av网站永久 | 免费观看18视频网站 | 国产免费三a在线 | 小黄鸭视频网站 | 成人深爱网 | 激情五月激情综合 | 精品国产免费人成网站 | 9299yy看片淫黄大片在线 | 亚洲一二三区在线观看 | 色色色色色色网 | 欧美人猛交日本人xxx | 久久这里知有精品99re66 | 国产黄大片在线观 | 青草午夜精品视频在线观看 | 羞羞视频污 | 多人性激烈的欧美三级视频 | 国产精品久久久久激情影院 | 国产一级又色又爽又黄大片 | 亚洲伦理中文字幕一区 | 日本动漫的18涩涩视频 | 91大片淫黄大片.在线天堂 | 看黄网址在线观看 | 欧美专区日韩 | 欧美中文字幕一区二区三区 | 草的爽免费视频 | 男女激情视频网站 | 日韩欧美国内 | 亚洲激情 | 成年午夜视频免费观看视频 | 日批网站免费 | 日本护士色xxxxx视频 |