今天我們要談論的話題是C語言中為何沒法規避全局變量?
之所以談論這個話題,主要是最近有幾個粉絲朋友問到了類似的問題:“我代碼中全局變量太多了,有沒有一種方法不使用全局變量來編寫C語言程序?”
當時并沒有感覺特別驚訝,因為曾經的我也是在這條道路上探索著,只是在C語言編程這條路上走得多一點,相對想得更加明白一點罷了。
對此,我的回答是:“沒有辦法規避全局變量的~”
1
耦合
其實自認為“沒有辦法規避全局變量的”,這個答案相對而言并不是特別專業,卻能夠讓更多的人聽懂。
在最開始使用C語言進行項目開發的過程中,都會提示要你用模塊化思想來編程,懷著“低耦合,高內聚”的編程理念。
但是你應該沒有聽說過模塊之間無耦合吧,所以耦合和內聚都是相對而言,當采用了一種不是最優的設計思想和方法,便編寫出了一套耦合度較高的代碼罷了。
而所謂的耦合便是你所劃分的各功能模塊代碼之間的數據共享了。
我一直相信代碼中的所有設計都可以在這世間找到類比原型,同樣這世間規律也完全可以用程序來進行表達,只是目前的科技水平還并沒有達到那么水平,或許人工智能就是一個萌芽吧。
而在C語言中全局變量的使用,便是一種數據共享的方式,同樣也是模塊化溝通的橋梁。
有朋友該說了,我不進行數據共享便不會使用全局變量了。
比如點了個燈,同時又寫了串口通信程序,兩者并沒有什么聯系,各自安好,那確實沒有數據共享,也可以不使用全局變量,最多認為你在靜態存儲區定義了幾個變量吧。
2
聯系
這世間原本就是千絲萬縷羈絆著而存在,或許從蝴蝶效應看來就會頗有感觸,那么編程中也是一樣的,相互之間的存在著某種聯系才愈發精彩,而這種聯系的表達則少不了數據的共享。
程序員們要用C語言來描述這世間種種規律,使用全局變量還逃得掉嗎?
即便有一種語言可以達到不使用類似于全局變量的語法形式,但數據的共享終究逃不了。
3
面向對象
面向對象的程序設計思想就是目前約束全局變量使用的一味良藥,面向對象與面向過程都是一種思維方式的存在,并非孰優孰劣。
但就目前軟件設計的發展來看,面向對象的程序設計思想在大型程序的設計和把控上有更多的優勢。
它能夠把各個抽象的個體描繪得更加的直觀,這樣個體之間的相互聯系也就順理成章的表達和約束。