• 正文
  • 推薦器件
  • 相關推薦
申請入駐 產業(yè)圖譜

單片機項目中太多全局變量有什么弊端?

2024/04/22
2131
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

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

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

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

真正做過項目的同學應該都能明白,項目中全局變量太多,會存在很多問題。

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

1、代碼可讀性差

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

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

2、代碼維護難度大

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

3、可移植性差

全局變量通常與特定的硬件或系統配置緊密相關,各個文件都在調用全局變量,這使得代碼的可移植性很差。

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

4、內存管理問題

全局變量太多會導致內存泄漏,以及碎片等諸多問題。

內存泄漏:如果沒有適當地管理全局變量的生命周期,可能會導致內存泄漏,特別是在資源受限的單片機環(huán)境中。

內存碎片:頻繁地分配和釋放全局變量相關的內存可能導致內存碎片,降低內存利用效率。

5、潛在bug

隨著全局變量的增多,出現bug的概率越大,多個函數或模塊可能同時訪問和修改全局變量,如果沒有適當的同步機制,會導致數據不一致和難以預測的行為。

一個函數對全局變量的修改可能會影響到其他不相關的函數,這種隱式的副作用使得錯誤難以定位和修復。

6、不利于模塊化設計

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

通常來說,模塊化設計的代碼,不會存在全局變量,或者很少有全局變量。

7、增加調試難度

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

8、更多弊端

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

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

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

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

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

2、使用指針和引用

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

3、使用函數參數

在函數內部,盡量使用局部變量來存儲臨時數據,而不是依賴全局變量。

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

4、封裝和模塊化

將相關的變量和函數封裝在結構體或類中,通過接口進行訪問和修改。

將代碼劃分為多個模塊,每個模塊負責特定的功能,并通過接口與其他模塊交互。

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

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

6、增加審查團隊

一般大公司會有專門的代碼審查相關的部門,進行定期的代碼審查,強調全局變量使用的危害,并鼓勵團隊成員尋找替代方案。

通過團隊協作和討論,共同尋找最佳實踐,也能減少全局變量的使用。

推薦器件

更多器件
器件型號 數量 器件廠商 器件描述 數據手冊 ECAD模型 風險等級 參考價格 更多信息
SN74LV244APWG4 1 Texas Instruments Eight-channel 2-V to 5.5-V buffers with tri-state outputs 20-TSSOP -40 to 125

ECAD模型

下載ECAD模型
暫無數據 查看
NC7WZ14P6X 1 Fairchild Semiconductor Corporation Inverter, LVC/LCX/Z Series, 2-Func, 1-Input, CMOS, PDSO6, 1.25 MM, ROHS COMPLIANT, EIAJ, SC-88A, SC-70, 6 PIN
$0.34 查看
FTLX8511D3 1 Finisar Corporation Transceiver, 840nm Min, 860nm Max, 10500Mbps(Tx), 10500Mbps(Rx), LC Connector, Board/panel Mount, ROHS COMPLIANT PACKAGE-30
暫無數據 查看

相關推薦

登錄即可解鎖
  • 海量技術文章
  • 設計資源下載
  • 產業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

作者黃工,從事嵌入式軟件開發(fā)工作8年有余,高級嵌入式軟件工程師,業(yè)余維護公眾號『strongerHuang』,分享嵌入式軟硬件、單片機、物聯網等內容。