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;
編程中變量結(jié)構(gòu)要點
更新時間: 2007-02-02 21:21:46來源: 粵嵌教育瀏覽量:1082
推薦閱讀
- ·摩通傳動(深圳)有限公司專場招聘會
- ·廣州2515嵌入式開發(fā)就業(yè)班
- ·嵌入式系統(tǒng)代碼功耗與內(nèi)存優(yōu)化策略
- ·粵嵌科技深度參與第二屆全國大學(xué)生職業(yè)規(guī)劃大賽,以產(chǎn)教融合助力高質(zhì)量就業(yè)
- ·移遠通信科技有限公司專場招聘會
- ·嵌入式系統(tǒng)設(shè)計的核心技術(shù)挑戰(zhàn)與創(chuàng)新實踐
- ·嵌入式實時操作系統(tǒng)的任務(wù)調(diào)度優(yōu)化策略與實踐
- ·湖北精實機電科技有限公司專場招聘會(長沙校區(qū))
- ·信號量與互斥鎖在資源競爭中的協(xié)同控制機制
- ·粵嵌科技2025年中總結(jié)大會召開——擘畫產(chǎn)教融合新藍圖