<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            C語言

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

            時間:2025-04-20 08:05:12 C語言 我要投稿
            • 相關推薦

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

              C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。那么C語言函數設計的一般原則和技巧都是怎樣的呢?以下僅供參考!

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

              具體如下:

              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函數,因為它實在太經典,太容易讓人犯錯誤了。所以,每一個有經驗的作者都會拿這個例子來警示他的讀者,我這里也是如此

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

              函數設計原則

              1、函數從意義上是一個獨立的功能模塊

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

              3、函數參數名要能夠體現參數的.意義

              4、盡量避免在函數中使用全局變量

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

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

              1、當函數參數不應該在函數體內部被修改時,應該加上const聲明

              2、如果參數是指針,且僅作輸入參數,則應加上const聲明

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

              函數的返回類型

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

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

              2、對參數進行有效性檢查

              a、對于指針參數的檢查尤為重要

              3、不要返回指向“棧內存”的指針

              a、棧內存在函數體結束時被自動釋放

              函數的規模

              1、函數體的規模要小,盡量控制在80行代碼以內;

              2、相同的輸入對應相同輸出,避免函數帶有“記憶”的功能;

              3、避免函數有過多的參數,參數個數盡量控制在4個以內。

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

            C語言指針函數和函數指針詳解12-08

            C語言函數的遞歸和調用05-09

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

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

            關于C語言函數的遞歸和調用05-27

            c語言隨機數生成函數和時間函數01-19

            淺談C語言函數03-28

            C語言函數 atoi()03-23

            C語言函數的含義06-15

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院