日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開發(fā)
培訓(xùn)信息
贊助商
C編程中使用全局變量應(yīng)注意的事項(xiàng)
C編程中使用全局變量應(yīng)注意的事項(xiàng)
 更新時(shí)間:2008-8-17 16:54:03  點(diǎn)擊數(shù):3
【字體: 字體顏色

1、盡量用局部變量替代全局變量。如果用局部變量能實(shí)現(xiàn)功能,最好用局部變量。

2、在函數(shù)僅僅只是要用到某個(gè)全局變量,而無需改動(dòng)時(shí),就將全局變量通過形參傳
遞進(jìn)來,變成局部變量使用。并在定義時(shí)使用const。這是避免全局變量在函數(shù)中被
意外的改動(dòng)。如在判斷語句中將'=='誤寫成'='。這時(shí)首先因?yàn)樵诤瘮?shù)內(nèi)的是局部變
量所以即使出錯(cuò)也不會影響全局變量和其他函數(shù)或模塊。其次因?yàn)槎x的是const類
型,當(dāng)發(fā)生意外改動(dòng)時(shí),編譯器會發(fā)出錯(cuò)誤信息或警報(bào),這也就是讓你的程序自動(dòng)
糾錯(cuò)。這種情況應(yīng)發(fā)生在對模塊內(nèi)的全局變量的調(diào)用,而對于其他模塊的全局變量
應(yīng)通過模塊接口調(diào)用。

3、中斷中使用的全局變量,在其他函數(shù)內(nèi)要使用時(shí)一定要進(jìn)入臨界區(qū)(也就是關(guān)閉
中斷)。如果是使用操作系統(tǒng)的話,則在所有使用到與其他任務(wù)共享的全局變量的
地方都要進(jìn)臨界區(qū)。

4、對于僅在某個(gè)函數(shù)內(nèi)使用的全局變量就用靜態(tài)局部變量替代。

5、應(yīng)盡量避免直接操作或調(diào)用其他模塊的變量。需要調(diào)用或修改其他模塊的變量
時(shí),可以通過那個(gè)模塊提供的操作接口函數(shù)進(jìn)行操作。比如某個(gè)模塊有一個(gè)全局的
計(jì)數(shù)值Count,則可以提供函數(shù)接口:GetCount()、SetCount()或ReloadCount()。
這樣一來,其他模塊要調(diào)用Count時(shí)就通過這些指定的函數(shù)接口。這樣可以降低模
塊間的耦合程度。另外如果嫌接口用函數(shù)實(shí)現(xiàn)過于復(fù)雜或是影響速度,則可以用帶
參數(shù)的宏定義實(shí)現(xiàn)。如:
#define GetCount()  (Count)
#define SetCount(num) (Count=(num))
#define ReloadCount() (Count=0)
這樣,使用時(shí)與函數(shù)調(diào)用一樣,但沒有函數(shù)調(diào)用時(shí)的開銷。另外,功能變化是可以
將宏定義改成函數(shù),而無需改動(dòng)調(diào)用語句。

6、每個(gè)模塊內(nèi)的全局變量應(yīng)該用靜態(tài)全局變量,一來其他模塊無法直接調(diào)用這些
變量;二來命名空間不會重疊,在實(shí)現(xiàn)一個(gè)模塊時(shí)無需考慮某個(gè)全局變量的名稱是
否已被其他模塊使用。如在模塊A中定義靜態(tài)變量 static unsigned char Count;
在B模塊中,仍可以定義靜態(tài)變量 static unsigned char Count;這兩個(gè)Count
不會相互影響,但是如果定義的是全局變量則不然。

7、模塊間的耦合性就是指當(dāng)修改其中某個(gè)模塊時(shí)會影起其他模塊運(yùn)行結(jié)果發(fā)生不
可預(yù)料的變化。如果模塊間是通過直接調(diào)用對方內(nèi)部的全局變量來實(shí)現(xiàn)交互,則兩
個(gè)模塊間的耦合性將會變得復(fù)雜而且難以控制。而模塊間的交互通過一個(gè)統(tǒng)一的接
口函數(shù)來實(shí)現(xiàn),使得模塊都無需知道對方模塊內(nèi)部的具體實(shí)現(xiàn)(這也就是面向?qū)ο?BR>里面的封裝)。當(dāng)某個(gè)模塊內(nèi)的實(shí)現(xiàn)發(fā)生改寫或升級時(shí),只要確保模塊接口不變即
可。這就大大降低兩模塊間的耦合。在規(guī)劃設(shè)計(jì)模塊時(shí)就應(yīng)認(rèn)真考慮好模塊的接口,
以及與其他模塊的調(diào)用關(guān)系。所以要記住編程原則:針對接口編程,而不是針對實(shí)
現(xiàn)。

8、函數(shù)的功能要單一,也就是高內(nèi)聚性。如果某個(gè)函數(shù)需要調(diào)用很多個(gè)全局變量,
則說明函數(shù)的內(nèi)聚性不夠高,可以考慮將函數(shù)拆分成幾個(gè)功能更單一的函數(shù)。

9、要記住編程是一種平衡的藝術(shù)。沒有程序可以做到十全十美,省空間、速度快、
易擴(kuò)展、易維護(hù)、低耦合、功能強(qiáng)大這些是不可能同時(shí)兼得的。如要提高程序的可
維護(hù)性,就必須在性能方面(空間和速度)做出一點(diǎn)犧牲。至于如何平衡,就要看
項(xiàng)目的具體要求了。


  • 上一篇: SPI總線在51系列單片機(jī)系統(tǒng)中的實(shí)現(xiàn)
  • 下一篇: 單鍵開關(guān)機(jī)的實(shí)現(xiàn)
  • 發(fā)表評論   告訴好友   打印此文  收藏此頁  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會
    中國行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營許可證:浙B2-20080178-1