久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 12252|回復(fù): 1
收起左側(cè)

C編程中使用全局變量應(yīng)注意的事項(xiàng)

[復(fù)制鏈接]
ID:80436 發(fā)表于 2015-5-20 14:33 | 顯示全部樓層 |閱讀模式

1、盡量用局部變量替代全局變量。如果用局部變量能實(shí)現(xiàn)功能,最好用局部變量。
2、在函數(shù)僅僅只是要用到某個(gè)全局變量,而無(wú)需改動(dòng)時(shí),就將全局變量通過(guò)形參傳遞進(jìn)來(lái),變成局部變量使用。并在定義時(shí)使用const。這是避免全局變量在函數(shù)中被意外的改動(dòng)。如在判斷語(yǔ)句中將'=='誤寫(xiě)成'='。這時(shí)首先因?yàn)樵诤瘮?shù)內(nèi)的是局部變量所以即使出錯(cuò)也不會(huì)影響全局變量和其他函數(shù)或模塊。其次因?yàn)槎x的是const類(lèi)型,當(dāng)發(fā)生意外改動(dòng)時(shí),編譯器會(huì)發(fā)出錯(cuò)誤信息或警報(bào),這也就是讓你的程序自動(dòng)糾錯(cuò)。這種情況應(yīng)發(fā)生在對(duì)模塊內(nèi)的全局變量的調(diào)用,而對(duì)于其他模塊的全局變量應(yīng)通過(guò)模塊接口調(diào)用。
3、中斷中使用的全局變量,在其他函數(shù)內(nèi)要使用時(shí)一定要進(jìn)入臨界區(qū)(也就是關(guān)閉中斷)。如果是使用操作系統(tǒng)的話(huà),則在所有使用到與其他任務(wù)共享的全局變量的地方都要進(jìn)臨界區(qū)。
4、對(duì)于僅在某個(gè)函數(shù)內(nèi)使用的全局變量就用靜態(tài)局部變量替代。
5、應(yīng)盡量避免直接操作或調(diào)用其他模塊的變量。需要調(diào)用或修改其他模塊的變量時(shí),可以通過(guò)那個(gè)模塊提供的操作接口函數(shù)進(jìn)行操作。比如某個(gè)模塊有一個(gè)全局的計(jì)數(shù)值Count,則可以提供函數(shù)接口:GetCount()、SetCount()或ReloadCount()。這樣一來(lái),其他模塊要調(diào)用Count時(shí)就通過(guò)這些指定的函數(shù)接口。這樣可以降低模塊間的耦合程度。另外如果嫌接口用函數(shù)實(shí)現(xiàn)過(guò)于復(fù)雜或是影響速度,則可以用帶參數(shù)的宏定義實(shí)現(xiàn)。如:
#define GetCount()  (Count)
#define SetCount(num) (Count=(num))
#define ReloadCount() (Count=0)
這樣,使用時(shí)與函數(shù)調(diào)用一樣,但沒(méi)有函數(shù)調(diào)用時(shí)的開(kāi)銷(xiāo)。另外,功能變化是可以將宏定義改成函數(shù),而無(wú)需改動(dòng)調(diào)用語(yǔ)句。
6、每個(gè)模塊內(nèi)的全局變量應(yīng)該用靜態(tài)全局變量,一來(lái)其他模塊無(wú)法直接調(diào)用這些變量;二來(lái)命名空間不會(huì)重疊,在實(shí)現(xiàn)一個(gè)模塊時(shí)無(wú)需考慮某個(gè)全局變量的名稱(chēng)是否已被其他模塊使用。如在模塊A中定義靜態(tài)變量 static unsigned char Count;在B模塊中,仍可以定義靜態(tài)變量 static unsigned char Count;這兩個(gè)Count不會(huì)相互影響,但是如果定義的是全局變量則不然。
7、模塊間的耦合性就是指當(dāng)修改其中某個(gè)模塊時(shí)會(huì)影起其他模塊運(yùn)行結(jié)果發(fā)生不可預(yù)料的變化。如果模塊間是通過(guò)直接調(diào)用對(duì)方內(nèi)部的全局變量來(lái)實(shí)現(xiàn)交互,則兩個(gè)模塊間的耦合性將會(huì)變得復(fù)雜而且難以控制。而模塊間的交互通過(guò)一個(gè)統(tǒng)一的接口函數(shù)來(lái)實(shí)現(xiàn),使得模塊都無(wú)需知道對(duì)方模塊內(nèi)部的具體實(shí)現(xiàn)(這也就是面向?qū)ο罄锩娴姆庋b)。當(dāng)某個(gè)模塊內(nèi)的實(shí)現(xiàn)發(fā)生改寫(xiě)或升級(jí)時(shí),只要確保模塊接口不變即可。這就大大降低兩模塊間的耦合。在規(guī)劃設(shè)計(jì)模塊時(shí)就應(yīng)認(rèn)真考慮好模塊的接口,以及與其他模塊的調(diào)用關(guān)系。所以要記住編程原則:針對(duì)接口編程,而不是針對(duì)實(shí)
現(xiàn)。
8、函數(shù)的功能要單一,也就是高內(nèi)聚性。如果某個(gè)函數(shù)需要調(diào)用很多個(gè)全局變量,則說(shuō)明函數(shù)的內(nèi)聚性不夠高,可以考慮將函數(shù)拆分成幾個(gè)功能更單一的函數(shù)。
9、要記住編程是一種平衡的藝術(shù)。沒(méi)有程序可以做到十全十美,省空間、速度快、易擴(kuò)展、易維護(hù)、低耦合、功能強(qiáng)大這些是不可能同時(shí)兼得的。如要提高程序的可維護(hù)性,就必須在性能方面(空間和速度)做出一點(diǎn)犧牲。至于如何平衡,就要看項(xiàng)目的具體要求了。


回復(fù)

使用道具 舉報(bào)

ID:110687 發(fā)表于 2016-10-25 12:23 | 顯示全部樓層
謝謝樓主的共享,學(xué)習(xí)了!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品欧美一区二区三区久久久 | 欧美专区日韩专区 | h在线| 91九色视频| 久久天堂网 | 狠狠久| 精久久久 | 青青草免费在线视频 | 日韩一区二区久久 | 成人欧美日韩一区二区三区 | 黄免费观看 | 黄色骚片 | 成年人免费在线视频 | 日韩在线观看网站 | 国产精品激情在线 | 亚洲毛片在线观看 | 欧美一区二区在线看 | 五月香婷婷 | 精品亚洲视频在线 | 久久久一 | 婷婷五月色综合 | 免费成人高清在线视频 | 久草福利 | 超碰成人免费 | 亚洲精品一区二区在线观看 | 日本粉嫩一区二区三区视频 | 日韩中文字幕在线视频 | 国产一级精品毛片 | 欧美日韩第一页 | 国产精品久久久久aaaa九色 | 国产精品国产馆在线真实露脸 | 欧美成人一级 | a中文在线视频 | 自拍视频精品 | 日本精品一区二区三区视频 | 日本精品视频一区二区三区四区 | 久久亚洲国产精品日日av夜夜 | 一区二区三区国产精品 | av网站免费观看 | 国产高清精品一区二区三区 | 精品网站999|