C語言中最重要的就是函數與變量。
C語言可以說是規(guī)則最少的高級語言,好處是學起來好學,壞處用起來難用(主要真針對大型項目復雜應用)。
好像C語言從來沒有一個專題來講“域”的概念,或者總是隱晦的給出,因為這個問題更確切的應該來自于一種編程的理念,準確的說C只是一種面向過程實現的語言,語言的本質只是工具。
軟件是有生命周期的,除了main函數中的while(1)以外,
假如你從事的項目,所有的軟件細節(jié)都是由你一個人編寫,你可能會忽略域的概念,大型的軟件總是有很多人參與,每個人的權限總是需要受到限制,這里所謂的限制就是你對于整個軟件系統(tǒng)資源的權限。
全局變量、局部變量、函數復用放到一起聊一聊。
全局變量,當你定義以后,他的作用域就是全局的,也就是在整個軟件生命周期中(軟件沒有結束運行之前),任何函數都可以訪問該變量,這種情況下一個變量的作用域是全局的,生命周期是無限的。
假如把while(1)去掉,那么在這個軟件執(zhí)行完最后一行代碼的時候,整個軟件就結束了,其生命周期也就結束了。
局部變量,往往定義在函數內部,假設他是靜態(tài)局部變量,那么他的作用域是在整個函數的內部,你在其定義函數的外部任何地方想要對其訪問都是非法的,他是整個函數不可分割的一部分,也就是他們是一個整體,外部無法處理,也就不會被破壞。雖然他從外部無法被訪問但是他的生命周期是無限的。
假如他被定義成非靜態(tài)的局部變量那么的生命周期是有限的,僅存在于函數被調用的范圍內。當函數完成調用以后,變量所占用的空間將被釋放。
接下里聊一聊函數復用,軟件終極理念之一便是“復用”,當然不是這里的狹隘的函數復用,所謂的函數復用,就是你編寫的一個函數,可以直接被他人應用,或者以源碼的方式or以庫的方式添加到他人的工程中。
假如一個函數中應用了全局變量,那么他不再是一個可復用的函數,全局變量定義的位置是在函數的外部,如果在函數中直接訪問全局變量,那么函數的完整性就被破壞了,有的小伙伴會想,那么我把其使用的全局變量一起移植到新的軟件工程當中不就OK了?
這樣做到底可不可以?你要明白一件事情,為什么函數要訪問一個全局變量,或者是外部變量,那么函數想要完成的功能無法僅憑內部實現,需要外部協(xié)助,全局變量只是牽了一條線,實際是由于全局變量相關的多個函數協(xié)同完成。所以函數不在具備復用性。