聽到「隱身術」三個字,我和小弦子眼裡瞬間就開始放光,就連旁聽的六叔叔注意力都集中了幾分。
就在我們都靜等老爹下文的時候,老爹卻偏偏不著急講了,又是喝水,又是擦眼鏡什麽的,一幅不慌不忙的樣子,恨得我牙根兒都癢癢。
吊足了我們的胃口後,老爹這才回到自己的電腦旁邊徐徐說道:「一直以來,因為我們的程序功能比較簡單,所以程序裡面就只有一個.c文件,但是隨著我們的程序越來越複雜,如果還把所有代碼都放在一個.c文件中就顯得特別臃腫,不方便閱讀。
其實推箱子這個程序已經暴露出來這個問題了,有時候我們需要查看某行代碼的時候,往往要翻閱很久。
於是乎我們就要對程序的功能進行分塊,各個塊完成相應的一些小功能。最後把小功能組合在一起,就完成了一個大的功能了。
為了方便管理和閱讀,一般我們就會按塊來創建.c文件,也就是說,程序中可能會存在多個.c文件。
在默認情況下,我們定義在一個.c文件的全局變量毫無秘密可言,因為其他的.c文件可以通過一個關鍵字——external讓它顯出真身,然後就可以肆無忌憚地把它的臉按在地板上摩擦。
比如說我們在zhangsan.c文件裡聲明了一個全局變量:
int heart = 10;
然後還有一個lisi.c文件,它想看看zhangsan.c中的heart是什麽,於是它就在自己聲明全局變量的地方寫了這麽一句:
external int heart;
這個時候在lisi.c中就能對zhangsan.c中的heart為所欲為了。
那這樣會不會有什麽問題麽?」
老爹拋出了他的疑問。我和小弦子對視了一眼,相互搖了搖頭。
問題肯定是有的嘛,不然老爹怎麽可能會無的放矢,跟我們扯這麽多有的沒的。
「既然你們想不到,那我就給你們設置個場景。
假設我們把一個.c文件比作是一個人,那麽.c文件中的變量就是我們身體的器官。像手啊,腳啊,這種類型的器官暴露在外面倒是沒什麽,甚至讓人摸兩下也沒什麽大問題。
可是像我們的心臟這類器官能夠暴露在外面麽?哪天隨便來個人跟我們說,讓我們把心臟給Ta看看,摸兩下,你說這讓不讓人害怕?
所以基於安全等各方面的因素,心臟這類的器官必須藏起來,不能雖然讓人觸碰。
人生在世,誰還沒有點小秘密了?.c文件也是一樣的啊,總得有點自己隱私吧?
所以說啊,如果我們讓一個全局變量只能在當前.c文件,也就是聲明這個變量的.c文件中能夠使用,就用static關鍵字修飾它。一旦一個全局變量被static關鍵字修飾,那麽其它的.c文件就不能在使用external關鍵字獲取了。
換句話說,被static修飾的全局變量就在其它.c文件面前消失了,這個就是static的隱身功能。
有一點要注意啊,剛剛說的內容都是針對的全局變量,如果是局部變量根本就不存在這個問題。」
我和小弦子若有所得,就連旁聽的六叔叔居然都露出一副「原來如此」的表情。
「static除了能夠修飾全局變量,
還可以修飾函數哦。同樣的道理,如果一個函數被static修飾了,那麽這個函數也就只能在定義它的.c文件中使用了。 對於函數而言,如果要在其它的.c文件中調用它就不能靠external關鍵字了,而是要靠頭文件,也就是.h文件。
還記得我們每一個程序都要寫的#include