• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            旅途

            如果想飛得高,就該把地平線忘掉

            函數(shù)可重入性及編寫規(guī)范

            一、可重入函數(shù)
            1)什么是可重入性?
            可重入(reentrant)函數(shù)可以由多于一個(gè)任務(wù)并發(fā)使用,而不必?fù)?dān)心數(shù)據(jù)錯(cuò)誤。相反, 不可重入(non-reentrant)函數(shù)不能由超過(guò)一個(gè)任務(wù)所共享,除非能確保函數(shù)的互斥(或者使用信號(hào)量,或者在代碼的關(guān)鍵部分禁用中斷)。可重入 函數(shù)可以在任意時(shí)刻被中斷,稍后再繼續(xù)運(yùn)行,不會(huì)丟失數(shù)據(jù)。可重入函數(shù)要么使用本地變量,要么在使用全局變量時(shí)保護(hù)自己的數(shù)據(jù)。

            2)可重入函數(shù):
            不為連續(xù)的調(diào)用持有靜態(tài)數(shù)據(jù)。
            不返回指向靜態(tài)數(shù)據(jù)的指針;所有數(shù)據(jù)都由函數(shù)的調(diào)用者提供。
            使用本地?cái)?shù)據(jù),或者通過(guò)制作全局?jǐn)?shù)據(jù)的本地拷貝來(lái)保護(hù)全局?jǐn)?shù)據(jù)。
            如果必須訪問(wèn)全局變量,記住利用互斥信號(hào)量來(lái)保護(hù)全局變量。
            絕不調(diào)用任何不可重入函數(shù)。

            3)不可重入函數(shù):
            函數(shù)中使用了靜態(tài)變量,無(wú)論是全局靜態(tài)變量還是局部靜態(tài)變量。
            函數(shù)返回靜態(tài)變量。
            函數(shù)中調(diào)用了不可重入函數(shù)。
            函數(shù)體內(nèi)使用了靜態(tài)的數(shù)據(jù)結(jié)構(gòu);
            函數(shù)體內(nèi)調(diào)用了malloc()或者free()函數(shù);
            函數(shù)體內(nèi)調(diào)用了其他標(biāo)準(zhǔn)I/O函數(shù)。
            函數(shù)是singleton中的成員函數(shù)而且使用了不使用線程獨(dú)立存儲(chǔ)的成員變量 。
            總的來(lái)說(shuō),如果一個(gè)函數(shù)在重入條件下使用了未受保護(hù)的共享的資源,那么它是不可重入的。

            4)示例
            在多線程條件下,函數(shù)應(yīng)當(dāng)是線程安全的,進(jìn)一步,更強(qiáng)的條件是可重入的。可重入函數(shù)保證了在多線程條件下,函數(shù)的狀態(tài)不會(huì)出現(xiàn)錯(cuò)誤。以下分別是一個(gè)不可重入和可重入函數(shù)的示例:
            //c code
            static int tmp;
            void func1(int* x, int* y) {
                tmp=*x;
                *x=*y;
                *y=tmp;
            }
            void func2(int* x, int* y) {
                int tmp;
                tmp=*x;
                *x=*y;
                *y=tmp;
            }
            func1是不可重入的,func2是可重入的。因?yàn)樵诙嗑€程條件下,操作系統(tǒng)會(huì)在func1還沒(méi)有執(zhí)行完的情況下,切換到另一個(gè)線程中,那個(gè)線程可能再次調(diào)用func1,這樣狀態(tài)就錯(cuò)了。

            二、函數(shù)編寫規(guī)范
            1 :對(duì)所調(diào)用函數(shù)的錯(cuò)誤返回碼要仔細(xì)、全面地處理 
             
            2 :明確函數(shù)功能,精確(而不是近似)地實(shí)現(xiàn)函數(shù)設(shè)計(jì) 
             
            3 :編寫可重入函數(shù)時(shí),應(yīng)注意局部變量的使用(如編寫C/C++ 語(yǔ)言的可重入函數(shù)時(shí),應(yīng)使用auto 即缺省態(tài)局部變量或寄存器變量)
            說(shuō)明:編寫C/C++語(yǔ)言的可重入函數(shù)時(shí),不應(yīng)使用static局部變量,否則必須經(jīng)過(guò)特殊處理,才能使函數(shù)具有可重入性。
             
            4 :編寫可重入函數(shù)時(shí),若使用全局變量,則應(yīng)通過(guò)關(guān)中斷、信號(hào)量(即P 、V 操作)等手段對(duì)其加以保護(hù)
            說(shuō)明:若對(duì)所使用的全局變量不加以保護(hù),則此函數(shù)就不具有可重入性,即當(dāng)多個(gè)進(jìn)程調(diào)用此函數(shù)時(shí),很有可能使有關(guān)全局變量變?yōu)椴豢芍獱顟B(tài)。
            示例:假設(shè)Exam是int型全局變量,函數(shù)Squre_Exam返回Exam平方值。那么如下函數(shù)不具有可重入性。
            unsigned int example( int para )
            {
                unsigned int temp;
                Exam = para; // (**)
                temp = Square_Exam( );
                return temp;
            }
            此 函數(shù)若被多個(gè)進(jìn)程調(diào)用的話,其結(jié)果可能是未知的,因?yàn)楫?dāng)(**)語(yǔ)句剛執(zhí)行完后,另外一個(gè)使用本函數(shù)的進(jìn)程可能正好被激活,那么當(dāng)新激活的進(jìn)程執(zhí)行到此函 數(shù)時(shí),將使Exam賦與另一個(gè)不同的para值,所以當(dāng)控制重新回到“temp = Square_Exam( )”后,計(jì)算出的temp很可能不是預(yù)想中的結(jié)果。此函數(shù)應(yīng)如下改進(jìn)。
            unsigned int example( int para )
            {
                unsigned int temp;
                [申請(qǐng)信號(hào)量操作]        // 若申請(qǐng)不到“信號(hào)量”,說(shuō)明另外的進(jìn)程正處于
                Exam = para;            // 給Exam賦值并計(jì)算其平方過(guò)程中(即正在使用此
                temp = Square_Exam( );  // 信號(hào)),本進(jìn)程必須等待其釋放信號(hào)后,才可繼
                [釋放信號(hào)量操作]        // 續(xù)執(zhí)行。若申請(qǐng)到信號(hào),則可繼續(xù)執(zhí)行,但其
                                        // 它進(jìn)程必須等待本進(jìn)程釋放信號(hào)量后,才能再使
                                        // 用本信號(hào)。
                return temp;
            }
             
            5 :在同一項(xiàng)目組應(yīng)明確規(guī)定對(duì)接口函數(shù)參數(shù)的合法性檢查應(yīng)由函數(shù)的調(diào)用者負(fù)責(zé)還是由接口函數(shù)本身負(fù)責(zé),缺省是由函數(shù)調(diào)用者負(fù)責(zé)
            說(shuō) 明:對(duì)于模塊間接口函數(shù)的參數(shù)的合法性檢查這一問(wèn)題,往往有兩個(gè)極端現(xiàn)象,即:要么是調(diào)用者和被調(diào)用者對(duì)參數(shù)均不作合法性檢查,結(jié)果就遺漏了合法性檢查這 一必要的處理過(guò)程,造成問(wèn)題隱患;要么就是調(diào)用者和被調(diào)用者均對(duì)參數(shù)進(jìn)行合法性檢查,這種情況雖不會(huì)造成問(wèn)題,但產(chǎn)生了冗余代碼,降低了效率。 
              
            6 :防止將函數(shù)的參數(shù)作為工作變量
            說(shuō)明:將函數(shù)的參數(shù)作為工作變量,有可能錯(cuò)誤地改變參數(shù)內(nèi)容,所以很危險(xiǎn)。對(duì)必須改變的參數(shù),最好先用局部變量代之,最后再將該局部變量的內(nèi)容賦給該參數(shù)。
            示例:如下函數(shù)的實(shí)現(xiàn)就不太好。
            void sum_data( unsigned int num, int *data, int *sum )
            {
                unsigned int count;
                *sum = 0;
             
                for (count = 0; count < num; count++)
                {
                    *sum  += data[count]; // sum成了工作變量,不太好。
                }
            }
            若改為如下,則更好些。
            void sum_data( unsigned int num, int *data, int *sum )
            {
                unsigned int count ;
                int sum_temp;
                sum_temp = 0;
             
                for (count = 0; count < num; count ++)
                {
                    sum_temp  += data[count];
                }
             
                *sum = sum_temp;
            }
              
            7 :函數(shù)的規(guī)模盡量限制在200 行以內(nèi)
            說(shuō)明:不包括注釋和空格行。 
            8 :一個(gè)函數(shù)僅完成一件功能 

            9 :為簡(jiǎn)單功能編寫函數(shù)
            說(shuō)明:雖然為僅用一兩行就可完成的功能去編函數(shù)好象沒(méi)有必要,但用函數(shù)可使功能明確化,增加程序可讀性,亦可方便維護(hù)、測(cè)試。
            示例:如下語(yǔ)句的功能不很明顯。
            value = ( a > b ) ? a : b ;
            改為如下就很清晰了。
             
            int max (int a, int b)
            {
                return ((a > b) ? a : b);
            }
             
            value = max (a, b);
             
            或改為如下。
             
            #define MAX (a, b) (((a) > (b)) ? (a) : (b))
             
            value = MAX (a, b);
             
            10:不要設(shè)計(jì)多用途面面俱到的函數(shù)
            說(shuō)明:多功能集于一身的函數(shù),很可能使函數(shù)的理解、測(cè)試、維護(hù)等變得困難。 
             
            11:函數(shù)的功能應(yīng)該是可以預(yù)測(cè)的,也就是只要輸入數(shù)據(jù)相同就應(yīng)產(chǎn)生同樣的輸出
            說(shuō) 明:帶有內(nèi)部“存儲(chǔ)器”的函數(shù)的功能可能是不可預(yù)測(cè)的,因?yàn)樗妮敵隹赡苋Q于內(nèi)部存儲(chǔ)器(如某標(biāo)記)的狀態(tài)。這樣的函數(shù)既不易于理解又不利于測(cè)試和維 護(hù)。在C/C++語(yǔ)言中,函數(shù)的static局部變量是函數(shù)的內(nèi)部存儲(chǔ)器,有可能使函數(shù)的功能不可預(yù)測(cè),然而,當(dāng)某函數(shù)的返回值為指針類型時(shí),則必須是 STATIC的局部變量的地址作為返回值,若為AUTO類,則返回為錯(cuò)針。
            示例:如下函數(shù),其返回值(即功能)是不可預(yù)測(cè)的。
             
            unsigned int integer_sum( unsigned int base )
            {
                unsigned int index;
                static unsigned int sum = 0; // 注意,是static類型的。
                                             // 若改為auto類型,則函數(shù)即變?yōu)榭深A(yù)測(cè)。
                for (index = 1; index <= base; index++)
                {
                    sum += index;
                }
                return sum;
            }
              
            12 :盡量不要編寫依賴于其他函數(shù)內(nèi)部實(shí)現(xiàn)的函數(shù)
            說(shuō)明:此條為函數(shù)獨(dú)立性的基本要求。由于目前大部分高級(jí)語(yǔ)言都是結(jié)構(gòu)化的,所以通過(guò)具體語(yǔ)言的語(yǔ)法要求與編譯器功能,基本就可以防止這種情況發(fā)生。但在匯編語(yǔ)言中,由于其靈活性,很可能使函數(shù)出現(xiàn)這種情況。
            示例:如下是在DOS下TASM的匯編程序例子。過(guò)程Print_Msg的實(shí)現(xiàn)依賴于Input_Msg的具體實(shí)現(xiàn),這種程序是非結(jié)構(gòu)化的,難以維護(hù)、修改。
             
            ...  // 程序代碼
            proc Print_Msg // 過(guò)程(函數(shù))Print_Msg
                ...  // 程序代碼
                jmp  LABEL
                ...  // 程序代碼
            endp
             
            proc Input_Msg // 過(guò)程(函數(shù))Input_Msg
                ...  // 程序代碼
            LABEL:
                ...  // 程序代碼
            endp

            13 :避免設(shè)計(jì)多參數(shù)函數(shù),不使用的參數(shù)從接口中去掉
            說(shuō)明:目的減少函數(shù)間接口的復(fù)雜度。 
              
            14 :非調(diào)度函數(shù)應(yīng)減少或防止控制參數(shù),盡量只使用數(shù)據(jù)參數(shù)
            說(shuō) 明:本建議目的是防止函數(shù)間的控制耦合。調(diào)度函數(shù)是指根據(jù)輸入的消息類型或控制命令,來(lái)啟動(dòng)相應(yīng)的功能實(shí)體(即函數(shù)或過(guò)程),而本身并不完成具體功能。控 制參數(shù)是指改變函數(shù)功能行為的參數(shù),即函數(shù)要根據(jù)此參數(shù)來(lái)決定具體怎樣工作。非調(diào)度函數(shù)的控制參數(shù)增加了函數(shù)間的控制耦合,很可能使函數(shù)間的耦合度增大, 并使函數(shù)的功能不唯一。
            示例:如下函數(shù)構(gòu)造不太合理。
            int add_sub( int a, int b, unsigned char add_sub_flg )
            {
                if (add_sub_flg == INTEGER_ADD)
                {
                    return (a + b);
                }
                else
                {
                    return (a  b);
                }
            }
            不如分為如下兩個(gè)函數(shù)清晰。
            int add( int a, int b )
            {
                return (a + b);
            }
             
            int sub( int a, int b )
            {
                return (a  b);
            }
            15 :檢查函數(shù)所有參數(shù)輸入的有效性 
             
            16 :檢查函數(shù)所有非參數(shù)輸入的有效性,如數(shù)據(jù)文件、公共變量等
            說(shuō)明:函數(shù)的輸入主要有兩種:一種是參數(shù)輸入;另一種是全局變量、數(shù)據(jù)文件的輸入,即非參數(shù)輸入。函數(shù)在使用輸入之前,應(yīng)進(jìn)行必要的檢查。 
              
            17 :函數(shù)名應(yīng)準(zhǔn)確描述函數(shù)的功能 
              
            18 :使用動(dòng)賓詞組為執(zhí)行某操作的函數(shù)命名。如果是OOP 方法,可以只有動(dòng)詞(名詞是對(duì)象本身)
            示例:參照如下方式命名函數(shù)。
            void print_record( unsigned int rec_ind ) ;
            int  input_record( void ) ;
            unsigned char get_current_color( void ) ;
              
            19 :避免使用無(wú)意義或含義不清的動(dòng)詞為函數(shù)命名
            說(shuō)明:避免用含義不清的動(dòng)詞如process、handle等為函數(shù)命名,因?yàn)檫@些動(dòng)詞并沒(méi)有說(shuō)明要具體做什么。
              
            20 :函數(shù)的返回值要清楚、明了,讓使用者不容易忽視錯(cuò)誤情況
            說(shuō)明:函數(shù)的每種出錯(cuò)返回值的意義要清晰、明了、準(zhǔn)確,防止使用者誤用、理解錯(cuò)誤或忽視錯(cuò)誤返回碼。 
              
            21 :除非必要,最好不要把與函數(shù)返回值類型不同的變量,以編譯系統(tǒng)默認(rèn)的轉(zhuǎn)換方式或強(qiáng)制的轉(zhuǎn)換方式作為返回值返回 
              
            22 :讓函數(shù)在調(diào)用點(diǎn)顯得易懂、容易理解 
              
            23 :在調(diào)用函數(shù)填寫參數(shù)時(shí),應(yīng)盡量減少?zèng)]有必要的默認(rèn)數(shù)據(jù)類型轉(zhuǎn)換或強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換
            說(shuō)明:因?yàn)閿?shù)據(jù)類型轉(zhuǎn)換或多或少存在危險(xiǎn)。 
              
            24 :避免函數(shù)中不必要語(yǔ)句,防止程序中的垃圾代碼
            說(shuō)明:程序中的垃圾代碼不僅占用額外的空間,而且還常常影響程序的功能與性能,很可能給程序的測(cè)試、維護(hù)等造成不必要的麻煩。 
              
            25 :防止把沒(méi)有關(guān)聯(lián)的語(yǔ)句放到一個(gè)函數(shù)中
            說(shuō) 明:防止函數(shù)或過(guò)程內(nèi)出現(xiàn)隨機(jī)內(nèi)聚。隨機(jī)內(nèi)聚是指將沒(méi)有關(guān)聯(lián)或關(guān)聯(lián)很弱的語(yǔ)句放到同一個(gè)函數(shù)或過(guò)程中。隨機(jī)內(nèi)聚給函數(shù)或過(guò)程的維護(hù)、測(cè)試及以后的升級(jí)等造 成了不便,同時(shí)也使函數(shù)或過(guò)程的功能不明確。使用隨機(jī)內(nèi)聚函數(shù),常常容易出現(xiàn)在一種應(yīng)用場(chǎng)合需要改進(jìn)此函數(shù),而另一種應(yīng)用場(chǎng)合又不允許這種改進(jìn),從而陷入 困境。
            在編程時(shí),經(jīng)常遇到在不同函數(shù)中使用相同的代碼,許多開發(fā)人員都愿把這些代碼提出來(lái),并構(gòu)成一個(gè)新函數(shù)。若這些代碼關(guān)聯(lián)較大并且是完成一個(gè)功能的,那么這種構(gòu)造是合理的,否則這種構(gòu)造將產(chǎn)生隨機(jī)內(nèi)聚的函數(shù)。
            示例:如下函數(shù)就是一種隨機(jī)內(nèi)聚。
             
            void Init_Var( void )
            {
                Rect.length = 0;
                Rect.width = 0; /* 初始化矩形的長(zhǎng)與寬 */
                Point.x = 10;
                Point.y = 10;   /* 初始化“點(diǎn)”的坐標(biāo) */
            }
             
            矩形的長(zhǎng)、寬與點(diǎn)的坐標(biāo)基本沒(méi)有任何關(guān)系,故以上函數(shù)是隨機(jī)內(nèi)聚。
            應(yīng)如下分為兩個(gè)函數(shù):
            void Init_Rect( void )
            {
                Rect.length = 0;
                Rect.width = 0; /* 初始化矩形的長(zhǎng)與寬 */
            }
             
            void Init_Point( void )
            {
                Point.x = 10;
                Point.y = 10;   /* 初始化“點(diǎn)”的坐標(biāo) */
            }
             
            26:如果多段代碼重復(fù)做同一件事情,那么在函數(shù)的劃分上可能存在問(wèn)題
            說(shuō)明:若此段代碼各語(yǔ)句之間有實(shí)質(zhì)性關(guān)聯(lián)并且是完成同一件功能的,那么可考慮把此段代碼構(gòu)造成一個(gè)新的函數(shù)。 
             
            27:功能不明確較小的函數(shù),特別是僅有一個(gè)上級(jí)函數(shù)調(diào)用它時(shí),應(yīng)考慮把它合并到上級(jí)函數(shù)中,而不必單獨(dú)存在
            說(shuō)明:模塊中函數(shù)劃分的過(guò)多,一般會(huì)使函數(shù)間的接口變得復(fù)雜。所以過(guò)小的函數(shù),特別是扇入很低的或功能不明確的函數(shù),不值得單獨(dú)存在。 
              
            28 :設(shè)計(jì)高扇入、合理扇出(小于7 )的函數(shù)
            說(shuō)明:扇出是指一個(gè)函數(shù)直接調(diào)用(控制)其它函數(shù)的數(shù)目,而扇入是指有多少上級(jí)函數(shù)調(diào)用它。
            扇 出過(guò)大,表明函數(shù)過(guò)分復(fù)雜,需要控制和協(xié)調(diào)過(guò)多的下級(jí)函數(shù);而扇出過(guò)小,如總是1,表明函數(shù)的調(diào)用層次可能過(guò)多,這樣不利程序閱讀和函數(shù)結(jié)構(gòu)的分析,并且 程序運(yùn)行時(shí)會(huì)對(duì)系統(tǒng)資源如堆棧空間等造成壓力。函數(shù)較合理的扇出(調(diào)度函數(shù)除外)通常是3-5。扇出太大,一般是由于缺乏中間層次,可適當(dāng)增加中間層次的 函數(shù)。扇出太小,可把下級(jí)函數(shù)進(jìn)一步分解多個(gè)函數(shù),或合并到上級(jí)函數(shù)中。當(dāng)然分解或合并函數(shù)時(shí),不能改變要實(shí)現(xiàn)的功能,也不能違背函數(shù)間的獨(dú)立性。
            扇入越大,表明使用此函數(shù)的上級(jí)函數(shù)越多,這樣的函數(shù)使用效率高,但不能違背函數(shù)間的獨(dú)立性而單純地追求高扇入。公共模塊中的函數(shù)及底層函數(shù)應(yīng)該有較高的扇入。
            較良好的軟件結(jié)構(gòu)通常是頂層函數(shù)的扇出較高,中層函數(shù)的扇出較少,而底層函數(shù)則扇入到公共模塊中。 
              
            29 :減少函數(shù)本身或函數(shù)間的遞歸調(diào)用
            說(shuō)明:遞歸調(diào)用特別是函數(shù)間的遞歸調(diào)用(如A->B->C->A),影響程序的可理解性;遞歸調(diào)用一般都占用較多的系統(tǒng)資源(如棧空間);遞歸調(diào)用對(duì)程序的測(cè)試有一定影響。故除非為某些算法或功能的實(shí)現(xiàn)方便,應(yīng)減少?zèng)]必要的遞歸調(diào)用。
              
            30 :仔細(xì)分析模塊的功能及性能需求,并進(jìn)一步細(xì)分,同時(shí)若有必要畫出有關(guān)數(shù)據(jù)流圖,據(jù)此來(lái)進(jìn)行模塊的函數(shù)劃分與組織
            說(shuō)明:函數(shù)的劃分與組織是模塊的實(shí)現(xiàn)過(guò)程中很關(guān)鍵的步驟,如何劃分出合理的函數(shù)結(jié)構(gòu),關(guān)系到模塊的最終效率和可維護(hù)性、可測(cè)性等。根據(jù)模塊的功能圖或/及數(shù)據(jù)流圖映射出函數(shù)結(jié)構(gòu)是常用方法之一。
              
            31 :改進(jìn)模塊中函數(shù)的結(jié)構(gòu),降低函數(shù)間的耦合度,并提高函數(shù)的獨(dú)立性以及代碼可讀性、效率和可維護(hù)性
            優(yōu)化函數(shù)結(jié)構(gòu)時(shí),要遵守以下原則:
            (1)不能影響模塊功能的實(shí)現(xiàn)。
            (2)仔細(xì)考查模塊或函數(shù)出錯(cuò)處理及模塊的性能要求并進(jìn)行完善。
            (3)通過(guò)分解或合并函數(shù)來(lái)改進(jìn)軟件結(jié)構(gòu)。
            (4)考查函數(shù)的規(guī)模,過(guò)大的要進(jìn)行分解。
            (5)降低函數(shù)間接口的復(fù)雜度。
            (6)不同層次的函數(shù)調(diào)用要有較合理的扇入、扇出。
            (7)函數(shù)功能應(yīng)可預(yù)測(cè)。
            (8)提高函數(shù)內(nèi)聚。(單一功能的函數(shù)內(nèi)聚最高)
            說(shuō)明:對(duì)初步劃分后的函數(shù)結(jié)構(gòu)應(yīng)進(jìn)行改進(jìn)、優(yōu)化,使之更為合理。 
              
            32 :在多任務(wù)操作系統(tǒng)的環(huán)境下編程,要注意函數(shù)可重入性的構(gòu)造
            說(shuō) 明:可重入性是指函數(shù)可以被多個(gè)任務(wù)進(jìn)程調(diào)用。在多任務(wù)操作系統(tǒng)中,函數(shù)是否具有可重入性是非常重要的,因?yàn)檫@是多個(gè)進(jìn)程可以共用此函數(shù)的必要條件。另 外,編譯器是否提供可重入函數(shù)庫(kù),與它所服務(wù)的操作系統(tǒng)有關(guān),只有操作系統(tǒng)是多任務(wù)時(shí),編譯器才有可能提供可重入函數(shù)庫(kù)。如DOS下BC和MSC等就不具 備可重入函數(shù)庫(kù),因?yàn)镈OS是單用戶單任務(wù)操作系統(tǒng)。
              
            33 :避免使用BOOL 參數(shù)
            說(shuō)明:原因有二,其一是BOOL參數(shù)值無(wú)意義,TURE/FALSE的含義是非常模糊的,在調(diào)用時(shí)很難知道該參數(shù)到底傳達(dá)的是什么意思;其二是BOOL參數(shù)值不利于擴(kuò)充。還有NULL也是一個(gè)無(wú)意義的單詞。
              
            34 : 對(duì)于提供了返回值的函數(shù),在引用時(shí)最好使用其返回值 
              
            35 :當(dāng)一個(gè)過(guò)程(函數(shù))中對(duì)較長(zhǎng)變量(一般是結(jié)構(gòu)的成員)有較多引用時(shí),可以用一個(gè)意義相當(dāng)?shù)暮甏?
            說(shuō)明:這樣可以增加編程效率和程序的可讀性。
            示例:在某過(guò)程中較多引用TheReceiveBuffer[FirstSocket].byDataPtr,
            則可以通過(guò)以下宏定義來(lái)代替:
            # define pSOCKDATA TheReceiveBuffer[FirstScoket].byDataPtr



            Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=729126


            posted on 2007-07-29 11:15 旅途 閱讀(224) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C/C++

            97精品伊人久久久大香线蕉 | 久久人人添人人爽添人人片牛牛| 国产女人aaa级久久久级| 丁香五月综合久久激情| 久久九九免费高清视频| 国产精品久久久久久久app| 无码日韩人妻精品久久蜜桃 | 久久人人添人人爽添人人片牛牛| 亚洲中文字幕无码一久久区| 国产精品禁18久久久夂久| 欧美色综合久久久久久| 国产亚洲精品久久久久秋霞| 秋霞久久国产精品电影院| 久久久久久精品久久久久| 精品久久久久久国产三级| 波多野结衣AV无码久久一区| 国产精品熟女福利久久AV| 久久亚洲AV成人无码电影| 日本精品一区二区久久久| 久久精品夜夜夜夜夜久久| 日韩中文久久| 久久久精品久久久久特色影视| 日本强好片久久久久久AAA| 久久影视综合亚洲| 高清免费久久午夜精品| 亚洲欧美成人综合久久久| 久久夜色撩人精品国产小说| 国产精品一区二区久久精品| 色综合久久无码五十路人妻| 久久久久国产精品麻豆AR影院 | 欧美与黑人午夜性猛交久久久| 国内精品久久人妻互换| 色偷偷久久一区二区三区| 伊人久久大香线蕉综合Av| 综合久久精品色| 久久笫一福利免费导航| 久久久久亚洲AV成人网人人网站 | 久久九九兔免费精品6| 亚洲午夜精品久久久久久浪潮| 国产精品亚洲美女久久久| 国产视频久久|