C語言中的static

2022-02-02 07:36:01 字數 686 閱讀 1898

在c語言中static有兩個作用,

乙個是在函式中宣告變數,這樣就不會在函式的每次呼叫中都會重新初始化其值。

二是宣告全域性的靜態變數或者函式。對於宣告的靜態變數或者函式,那麼它就只能在本編譯單元可見,其他編譯單元中不可見。那麼什麼叫做乙個編譯單元呢?一般來講,乙個c原始檔就是乙個編譯單元,那麼標頭檔案是怎麼處理的呢?在預處理的時候,預處理器會把include的標頭檔案都展開到當前原始檔中,然後由編譯器來編譯。這樣,我們就可以說,對於編譯器來講,它是見不到所謂的標頭檔案的,因為它在預處理階段就已經由預處理器給消滅掉了,即展開了。所以如果你在標頭檔案中定義了乙個static變數,那麼在每個include了它的原始檔中都會有乙個這樣的變數,而且他們相互之間不可見。所以,如果你想定乙個全域性變數,跨多個編譯單元可見的全域性變數,那麼你不能把它定義為static的。只能在乙個原始檔中定義為非static的,然後在標頭檔案中使用extern來宣告。然後在其他編譯單元中通過include這個標頭檔案來使用這個全域性變數。同時,也不能通過在標頭檔案中定義乙個非static變數的方式來實現,因為這樣標頭檔案會被展開到多個原始檔中,從而造成在多個原始檔中重複定義同乙個變數的錯誤。另外,如果原始檔的某些函式是你不希望外部使用的,就好比cpp的private函式一樣,那麼你應該把它定義為static的。reference

C 語言中的static

static 在c語言中,關鍵字 static 有三個明顯的作用 1 在函式體,乙個被宣告為靜態的變數在這一函式被呼叫過程中維持其值不變。2 在模組內 但在函式體外 乙個被宣告為靜態的變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問。它是乙個本地的全域性變數。3 在模組內,乙個被宣告為靜態的...

c語言中的static

1 用static宣告區域性變數 用關鍵字static宣告區域性變數為 靜態區域性變數 時,可以讓該區域性變數在函式呼叫結束後不消失而保留原值,即其占用的儲存單元不釋放。static int a 1 2 用static宣告外部變數 有時在程式設計中,希望某些外部變數只限於被本檔案引用,而不能被其他檔...

C語言中的static

c程式一直由下列部分組成 1 正文段 cpu執行的機器指令部分 乙個程式只有乙個副本 唯讀,防止程式由於意外事故而修改自身指令 2 初始化資料段 資料段 在程式中所有賦了初值的全域性變數,存放在這裡。3 非初始化資料段 bss段 在程式中沒有初始化的全域性變數 核心將此段初始化為0。5 堆 動態儲存...