欧美日韩不卡一区二区三区,www.蜜臀.com,高清国产一区二区三区四区五区,欧美日韩三级视频,欧美性综合,精品国产91久久久久久,99a精品视频在线观看

C語言

C語言函數(shù)設(shè)計(jì)的一般原則和技巧

時(shí)間:2025-04-20 08:05:12 C語言 我要投稿
  • 相關(guān)推薦

C語言函數(shù)設(shè)計(jì)的一般原則和技巧

  C語言的設(shè)計(jì)目標(biāo)是提供一種能以簡易的方式編譯、處理低級(jí)存儲(chǔ)器、產(chǎn)生少量的機(jī)器碼以及不需要任何運(yùn)行環(huán)境支持便能運(yùn)行的編程語言。那么C語言函數(shù)設(shè)計(jì)的一般原則和技巧都是怎樣的呢?以下僅供參考!

  C語言函數(shù)設(shè)計(jì)的一般原則和技巧 篇1

  具體如下:

  1、原則上盡量少使用全局變量,因?yàn)槿肿兞康纳芷谔L,容易出錯(cuò),也會(huì)長時(shí)間占用空間.各個(gè)源文件負(fù)責(zé)本身文件的全局變量,同時(shí)提供一對對外函數(shù),方便其它函數(shù)使用該函數(shù)來訪問變量。

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

  2、參數(shù)命名要恰當(dāng),順序要合理。

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

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

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

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

  還有一個(gè)問題,這兩個(gè)參數(shù)那一個(gè)該在前那一個(gè)該在后?參數(shù)的順序要遵循程序員的習(xí)慣。一般地,應(yīng)將目的參數(shù)放在前面,源參數(shù)放在后面。如果將函數(shù)聲明為:

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

  別人在使用時(shí)可能會(huì)不假思索地寫成如下形式:

  char str[20];

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

  3、如果參數(shù)是指針,且僅作輸入?yún)?shù)用,則應(yīng)在類型前加const,以防止該指針在函數(shù)體內(nèi)被意外修改。例如:

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

  4、不要省略返回值的類型,如果函數(shù)沒有返回值,那么應(yīng)聲明為void 類型。

  如果沒有返回值,編譯器則默認(rèn)為函數(shù)的返回值是int類型的。

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

  6、return 語句不可返回指向“棧內(nèi)存”的“指針”,因?yàn)樵搩?nèi)存在函數(shù)體結(jié)束時(shí)被自動(dòng)銷毀。例如:

  char * Func(void)

  {

  char str[30];

  …

  return str;

  }

  str 屬于局部變量,位于棧內(nèi)存中,在Func 結(jié)束的時(shí)候被釋放,所以返回str 將導(dǎo)致錯(cuò)誤。

  7、函數(shù)的功能要單一,不要設(shè)計(jì)多用途的函數(shù)。微軟的Win32 API就是違反本規(guī)則的典型,其函數(shù)往往因?yàn)閰?shù)不一樣而功能不一,導(dǎo)致很多初學(xué)者迷惑。

  8、函數(shù)體的規(guī)模要小,盡量控制在80 行代碼之內(nèi)。

  9、相同的輸入應(yīng)當(dāng)產(chǎn)生相同的輸出。盡量避免函數(shù)帶有“記憶”功能。

  帶有“記憶”功能的函數(shù),其行為可能是不可預(yù)測的,因?yàn)樗男袨榭赡苋Q于某種“記憶狀態(tài)“。這樣的函數(shù)既不易理解又不利于測試和維護(hù)。在C 語言中,函數(shù)的static局部變量是函數(shù)的“記憶”存儲(chǔ)器。建議盡量少用static 局部變量,除非必需。

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

  11、盡量不要使用類型和數(shù)目不確定的'參數(shù)。

  C 標(biāo)準(zhǔn)庫函數(shù)printf 是采用不確定參數(shù)的典型代表,其原型為:

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

  這種風(fēng)格的函數(shù)在編譯時(shí)喪失了嚴(yán)格的類型安全檢查。

  12、有時(shí)候函數(shù)不需要返回值,但為了增加靈活性如支持鏈?zhǔn)奖磉_(dá),可以附加返回值。例如字符串拷貝函數(shù)strcpy 的原型:

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

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

  char str[20];

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

  13、不僅要檢查輸入?yún)?shù)的有效性,還要檢查通過其它途徑進(jìn)入函數(shù)體內(nèi)的變量的有效性,例如全局變量、文件句柄等。

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

  違反這條規(guī)則的典型代表就是C語言標(biāo)準(zhǔn)庫函數(shù)getchar。幾乎沒有一部名著沒有提到getchar函數(shù),因?yàn)樗鼘?shí)在太經(jīng)典,太容易讓人犯錯(cuò)誤了。所以,每一個(gè)有經(jīng)驗(yàn)的作者都會(huì)拿這個(gè)例子來警示他的讀者,我這里也是如此

  C語言函數(shù)設(shè)計(jì)的一般原則和技巧 篇2

  函數(shù)設(shè)計(jì)原則

  1、函數(shù)從意義上是一個(gè)獨(dú)立的功能模塊

  2、函數(shù)名要在一定程度上反映函數(shù)的功能

  3、函數(shù)參數(shù)名要能夠體現(xiàn)參數(shù)的.意義

  4、盡量避免在函數(shù)中使用全局變量

  void sc(char *s1, char *s2);

  void str_copy(char *str_dest, char *str_src);

  1、當(dāng)函數(shù)參數(shù)不應(yīng)該在函數(shù)體內(nèi)部被修改時(shí),應(yīng)該加上const聲明

  2、如果參數(shù)是指針,且僅作輸入?yún)?shù),則應(yīng)加上const聲明

  void str_copy(char *str_dest, const char *str_src);

  函數(shù)的返回類型

  1、不能省略返回值得類型

  a、如果函數(shù)沒有返回值,那么就應(yīng)該聲明為void 類型,(應(yīng)為在C語言中默認(rèn)的返回類型為int)

  2、對參數(shù)進(jìn)行有效性檢查

  a、對于指針參數(shù)的檢查尤為重要

  3、不要返回指向“棧內(nèi)存”的指針

  a、棧內(nèi)存在函數(shù)體結(jié)束時(shí)被自動(dòng)釋放

  函數(shù)的規(guī)模

  1、函數(shù)體的規(guī)模要小,盡量控制在80行代碼以內(nèi);

  2、相同的輸入對應(yīng)相同輸出,避免函數(shù)帶有“記憶”的功能;

  3、避免函數(shù)有過多的參數(shù),參數(shù)個(gè)數(shù)盡量控制在4個(gè)以內(nèi)。

【C語言函數(shù)設(shè)計(jì)的一般原則和技巧】相關(guān)文章:

C語言指針函數(shù)和函數(shù)指針詳解12-08

C語言函數(shù)的遞歸和調(diào)用05-09

C語言的strcpy()和strncpy()函數(shù)06-04

C語言中isalnum()函數(shù)和isalpha()函數(shù)的對比03-14

關(guān)于C語言函數(shù)的遞歸和調(diào)用05-27

c語言隨機(jī)數(shù)生成函數(shù)和時(shí)間函數(shù)01-19

淺談C語言函數(shù)03-28

C語言函數(shù) atoi()03-23

C語言函數(shù)的含義06-15