1. gzyueqian
      13424082685
      首頁 > 新聞中心 > > 正文

      編程中變量結(jié)構(gòu)要點

      更新時間: 2007-02-02 21:21:46來源: 粵嵌教育瀏覽量:1082

        1:去掉沒必要的全局變量和局部變量。

        說明:全局變量是增大模塊間耦合的原因之一,故應(yīng)減少沒必要的全局變量以降低模塊間的耦合度。

        2:仔細定義并明確全局變量的含義、作用、取值范圍及全局變量間的關(guān)系。

        說明:在對變量聲明的同時,應(yīng)對其含義、作用及取值范圍進行注釋說明,同時若有必要還應(yīng)說明與其它變量的關(guān)系。 

        3:明確全局變量與操作此全局變量的函數(shù)或過程的關(guān)系,如訪問、修改及創(chuàng)建等。

        說明:明確過程操作變量的關(guān)系后,將有利于程序的進一步優(yōu)化、單元測試、系統(tǒng)聯(lián)調(diào)以及代碼維護等。這種關(guān)系的說明可在注釋或文檔中描述。

      RELATION System_Init Input_Rec Print_Rec Stat_Score
      Student Create Modify Access Access
      Score Create Modify Access Access, Modify

        注:RELATION為操作關(guān)系;System_Init、Input_Rec、Print_Rec、Stat_Score為四個不同的函數(shù);Student、Score為兩個全局變量;Create表示創(chuàng)建,Modify表示修改,Access表示訪問。

        其中,函數(shù)Input_Rec、Stat_Score都可修改變量Score,故此變量將引起函數(shù)間較大的耦合,并可能增加代碼測試、維護的難度。 

        4:當(dāng)向全局變量傳遞數(shù)據(jù)時,要十分小心,防止賦與不合理的值或越界等現(xiàn)象發(fā)生。

        說明:對全局變量賦值時,若有必要應(yīng)進行合法性檢查,以提高代碼的可靠性、穩(wěn)定性。

        5:防止局部變量與全局變量同名。

        說明:若使用了較好的命名規(guī)則,那么此問題可自動消除。

        6:嚴禁使用未經(jīng)初始化的變量作為右值。
             
        說明:特別是在C/C++中引用未經(jīng)賦值的指針,經(jīng)常會引起系統(tǒng)崩潰。

        7:構(gòu)造僅有一個模塊或函數(shù)可以修改、創(chuàng)建,而其余有關(guān)模塊或函數(shù)只訪問的全局變量,防止多個不同模塊或函數(shù)都可以修改、創(chuàng)建同一全局變量的現(xiàn)象。
             
        說明:降低全局變量耦合度。

        8:結(jié)構(gòu)的功能要單一,是針對一種事務(wù)的抽象。
             
        說明:設(shè)計結(jié)構(gòu)時應(yīng)力爭使結(jié)構(gòu)代表一種現(xiàn)實事務(wù)的抽象,而不是同時代表多種。結(jié)構(gòu)中的各元素應(yīng)代表同一事務(wù)的不同側(cè)面,而不應(yīng)把描述沒有關(guān)系或關(guān)系很弱的不同事務(wù)的元素放到同一結(jié)構(gòu)中。

        示例:如下結(jié)構(gòu)不太清晰、合理。

      typedef struct STUDENT_STRU
      {
      unsigned char name[8]; /* student's name */
      unsigned char age; /* student's age */
      unsigned char sex; /* student's sex, as follows */
      /* 0 - FEMALE; 1 - MALE */
      unsigned char
      teacher_name[8]; /* the student teacher's name */
      unisgned char
      teacher_sex; /* his teacher sex */
      } STUDENT;

        若改為如下,可能更合理些。
      typedef struct TEACHER_STRU
      {
      unsigned char name[8]; /* teacher name */
      unisgned char sex; /* teacher sex, as follows */
      /* 0 - FEMALE; 1 - MALE */
      } TEACHER;

      typedef struct STUDENT_STRU
      {
      unsigned char name[8]; /* student's name */
      unsigned char age; /* student's age */
      unsigned char sex; /* student's sex, as follows */
      /* 0 - FEMALE; 1 - MALE */
      unsigned int teacher_ind; /* his teacher index */
      } STUDENT;

        9:不要設(shè)計面面俱到、非常靈活的數(shù)據(jù)結(jié)構(gòu)。 

        說明:面面俱到、靈活的數(shù)據(jù)結(jié)構(gòu)反而容易引起誤解和操作困難。

        10:不同結(jié)構(gòu)間的關(guān)系不要過于復(fù)雜。

               說明:若兩個結(jié)構(gòu)間關(guān)系較復(fù)雜、密切,那么應(yīng)合為一個結(jié)構(gòu)。

        示例:如下兩個結(jié)構(gòu)的構(gòu)造不合理。

      typedef struct PERSON_ONE_STRU
      {
      unsigned char name[8];
      unsigned char addr[40];
      unsigned char sex;
      unsigned char city[15];
      } PERSON_ONE;

      typedef struct PERSON_TWO_STRU
      {
      unsigned char name[8];
      unsigned char age;
      unsigned char tel;
      } PERSON_TWO;

        由于兩個結(jié)構(gòu)都是描述同一事物的,那么不如合成一個結(jié)構(gòu)。

      typedef struct PERSON_STRU
      {
      unsigned char name[8];
      unsigned char age;
      unsigned char sex;
      unsigned char addr[40];
      unsigned char city[15];
      unsigned char tel;
      } PERSON;

        11:結(jié)構(gòu)中元素的個數(shù)應(yīng)適中。若結(jié)構(gòu)中元素個數(shù)過多可考慮依據(jù)某種原則把元素組成不同的子結(jié)構(gòu),以減少原結(jié)構(gòu)中元素的個數(shù)。
             
        說明:增加結(jié)構(gòu)的可理解性、可操作性和可維護性。

        示例:假如認為如上的_PERSON結(jié)構(gòu)元素過多,那么可如下對之劃分。

      typedef struct PERSON_BASE_INFO_STRU
      {
      unsigned char name[8];
      unsigned char age;
      unsigned char sex;
      } PERSON_BASE_INFO;

      typedef struct PERSON_ADDRESS_STRU
      {
      unsigned char addr[40];
      unsigned char city[15];
      unsigned char tel;
      } PERSON_ADDRESS;

      typedef struct PERSON_STRU
      {
      PERSON_BASE_INFO person_base;
      PERSON_ADDRESS person_addr;
      } PERSON;

        12:仔細設(shè)計結(jié)構(gòu)中元素的布局與排列順序,使結(jié)構(gòu)容易理解、節(jié)省占用空間,并減少引起誤用現(xiàn)象。

        說明:合理排列結(jié)構(gòu)中元素順序,可節(jié)省空間并增加可理解性。

        示例:如下結(jié)構(gòu)中的位域排列,將占較大空間,可讀性也稍差。

      typedef struct EXAMPLE_STRU
      {
      unsigned int valid: 1;
      PERSON person;
      unsigned int set_flg: 1;
      } EXAMPLE;

      若改成如下形式,不僅可節(jié)省1字節(jié)空間,可讀性也變好了。
      typedef struct EXAMPLE_STRU
      {
      unsigned int valid: 1;
      unsigned int set_flg: 1;
      PERSON person ;
      } EXAMPLE;

        13:留心具體語言及編譯器處理不同數(shù)據(jù)類型的原則及有關(guān)細節(jié)。

        說明:如在C語言中,static局部變量將在內(nèi)存“數(shù)據(jù)區(qū)”中生成,而非static局部變量將在“堆棧”中生成。這些細節(jié)對程序質(zhì)量的保證非常重要。

        14:編程時,要注意數(shù)據(jù)類型的強制轉(zhuǎn)換。

        說明:當(dāng)進行數(shù)據(jù)類型強制轉(zhuǎn)換時,其數(shù)據(jù)的意義、轉(zhuǎn)換后的取值等都有可能發(fā)生變化,而這些細節(jié)若考慮不周,就很有可能留下隱患。

        15:對編譯系統(tǒng)默認的數(shù)據(jù)類型轉(zhuǎn)換,也要有充分的認識。

        示例:如下賦值,多數(shù)編譯器不產(chǎn)生告警,但值的含義還是稍有變化。

      char chr;
      unsigned short int exam;

      chr = -1;
      exam = chr; // 編譯器不產(chǎn)生告警,此時exam為0xFFFF。

        16:盡量減少沒有必要的數(shù)據(jù)類型默認轉(zhuǎn)換與強制轉(zhuǎn)換。

        17:合理地設(shè)計數(shù)據(jù)并使用自定義數(shù)據(jù)類型,避免數(shù)據(jù)間進行不必要的類型轉(zhuǎn)換。

        18:對自定義數(shù)據(jù)類型進行恰當(dāng)命名,使它成為自描述性的,以提高代碼可讀性。注意其命名方式在同一產(chǎn)品中的統(tǒng)一。

        說明:使用自定義類型,可以彌補編程語言提供類型少、信息量不足的缺點,并能使程序清晰、簡潔。

        示例:可參考如下方式聲明自定義數(shù)據(jù)類型。 

        下面的聲明可使數(shù)據(jù)類型的使用簡潔、明了。

      typedef unsigned char BYTE;
      typedef unsigned short WORD;
      typedef unsigned int DWORD;
       
        下面的聲明可使數(shù)據(jù)類型具有更豐富的含義。

      typedef float DISTANCE;
      typedef float SCORE;

      免費預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 亚洲美女视频免费爽 | 日本性视频高清天天摸天 | 自拍视频一区二区三区在线 | 中文字幕AV制服丝袜精品 | 三级少妇老少妇黄 | 亚洲va中文字幕欧美不卡 |