加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

單片機(jī)項(xiàng)目中太多全局變量有什么弊端?

04/22 11:00
2348
閱讀需 5 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

最近有讀者遇到了這樣的問題:入職接到前同事丟下的“爛攤子”,項(xiàng)目中很多全局變量······

問我:全局變量太多有哪些弊端?該如何規(guī)避,以及如何管理全局變量等。

全局變量太多有哪些弊端?

真正做過項(xiàng)目的同學(xué)應(yīng)該都能明白,項(xiàng)目中全局變量太多,會(huì)存在很多問題。

這里給大家羅列一些太多全局變量可能存在的弊端:

1、代碼可讀性差

漫天全局變量,特別是各個(gè)源文件都有全部變量的情況下,代碼可讀性相信你都能明白有多差。

如果再加上命名不規(guī)范、隨處定義,代碼可讀性更是不能言語。

2、代碼維護(hù)難度大

隨著全局變量的增多,不同模塊的變量名可能會(huì)產(chǎn)生沖突或混淆,導(dǎo)致代碼難以理解和維護(hù)。同時(shí),全局變量使得代碼中的依賴關(guān)系變得復(fù)雜,難以追蹤和理解。這增加了新開發(fā)人員的學(xué)習(xí)成本,也增加了修改和調(diào)試的難度。

3、可移植性差

全局變量通常與特定的硬件或系統(tǒng)配置緊密相關(guān),各個(gè)文件都在調(diào)用全局變量,這使得代碼的可移植性很差。

再次就是,隨著項(xiàng)目的增長和功能的增加,全局變量的管理和維護(hù)變得更加困難,這限制了項(xiàng)目的可擴(kuò)展性。

4、內(nèi)存管理問題

全局變量太多會(huì)導(dǎo)致內(nèi)存泄漏,以及碎片等諸多問題。

內(nèi)存泄漏:如果沒有適當(dāng)?shù)毓芾砣肿兞康纳芷冢赡軙?huì)導(dǎo)致內(nèi)存泄漏,特別是在資源受限的單片機(jī)環(huán)境中。

內(nèi)存碎片:頻繁地分配和釋放全局變量相關(guān)的內(nèi)存可能導(dǎo)致內(nèi)存碎片,降低內(nèi)存利用效率。

5、潛在bug

隨著全局變量的增多,出現(xiàn)bug的概率越大,多個(gè)函數(shù)或模塊可能同時(shí)訪問和修改全局變量,如果沒有適當(dāng)?shù)耐綑C(jī)制,會(huì)導(dǎo)致數(shù)據(jù)不一致和難以預(yù)測的行為。

一個(gè)函數(shù)對(duì)全局變量的修改可能會(huì)影響到其他不相關(guān)的函數(shù),這種隱式的副作用使得錯(cuò)誤難以定位和修復(fù)。

6、不利于模塊化設(shè)計(jì)

如果全局變量在各個(gè)模塊中穿插使用,不僅破壞了模塊的獨(dú)立性,還使得模塊之間的耦合度增加,降低了代碼的可重用性和可維護(hù)性。

通常來說,模塊化設(shè)計(jì)的代碼,不會(huì)存在全局變量,或者很少有全局變量。

7、增加調(diào)試難度

在單元測試測試,或項(xiàng)目全局測試時(shí),全局變量的狀態(tài)管理變得復(fù)雜。測試人員需要確保在每次測試之前全局變量處于正確的狀態(tài)。如果全局變量的修改可能發(fā)生在代碼的多個(gè)位置,這使得調(diào)試時(shí)難以確定問題的根源。

8、更多弊端

以上是常見的弊端,還有哪些弊端,大家可以留言討論。

全局變量太多如何規(guī)避?

全局變量太多有諸多弊端,那么如何規(guī)避呢?

1、使用靜態(tài)局部變量

在某些情況下,可以使用靜態(tài)局部變量來替代全局變量,這樣就避免了其他地方修改全局變量。

2、使用指針和引用

在函數(shù)內(nèi)部,可以通過指針或引用來訪問和修改外部變量的值,而無需直接聲明為全局變量。

3、使用函數(shù)參數(shù)

在函數(shù)內(nèi)部,盡量使用局部變量來存儲(chǔ)臨時(shí)數(shù)據(jù),而不是依賴全局變量。

通過函數(shù)參數(shù)來傳遞需要的數(shù)據(jù),并通過返回值來獲取結(jié)果,而不是直接訪問或修改全局變量。

4、封裝和模塊化

將相關(guān)的變量和函數(shù)封裝在結(jié)構(gòu)體或類中,通過接口進(jìn)行訪問和修改。

將代碼劃分為多個(gè)模塊,每個(gè)模塊負(fù)責(zé)特定的功能,并通過接口與其他模塊交互。

5、定期優(yōu)化代碼

一個(gè)好的項(xiàng)目,肯定需要是定期維護(hù)和優(yōu)化。比如優(yōu)化數(shù)據(jù)結(jié)構(gòu)和算法,減少不必要的全局變量,甚至定期重構(gòu)部分模塊代碼。

6、增加審查團(tuán)隊(duì)

一般大公司會(huì)有專門的代碼審查相關(guān)的部門,進(jìn)行定期的代碼審查,強(qiáng)調(diào)全局變量使用的危害,并鼓勵(lì)團(tuán)隊(duì)成員尋找替代方案。

通過團(tuán)隊(duì)協(xié)作和討論,共同尋找最佳實(shí)踐,也能減少全局變量的使用。

推薦器件

更多器件
器件型號(hào) 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險(xiǎn)等級(jí) 參考價(jià)格 更多信息
ECS-60-32-4X 1 ECS International Inc Parallel - Fundamental Quartz Crystal, 6MHz Nom, ROHS COMPLIANT, RESISTANCE WELD, HC-49USX, 2 PIN
$0.94 查看
530FC125M000DGR 1 Silicon Laboratories Inc LVDS Output Clock Oscillator, 10MHz Min, 945MHz Max, 125MHz Nom, ROHS COMPLIANT, SMD, 6 PIN
暫無數(shù)據(jù) 查看
LFXTAL003000REEL 1 IQD Frequency Products QUARTZ CRYSTAL RESONATOR, 0.032768 MHz, ROHS COMPLIANT, SMD, 4 PIN
$0.53 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

作者黃工,從事嵌入式軟件開發(fā)工作8年有余,高級(jí)嵌入式軟件工程師,業(yè)余維護(hù)公眾號(hào)『strongerHuang』,分享嵌入式軟硬件、單片機(jī)、物聯(lián)網(wǎng)等內(nèi)容。