C語言學習筆記1:static

1 綜述

2 static在函數中的應用

函數分爲內部函數和外部函數,當一個源程序由多個源文件組成時,C語言根據函數能否被其它源文件中的函數調用,將函數分爲內部函數和外部函數。

2.1 內部函數(靜態函數)

如果在一個源文件中定義的函數,只能被本文件中的函數調用,而不能被同一程序其它文件中的函數調用,這種函數稱爲內部函數。定義內部函數用關鍵字static:

static 函數類型 函數名(函數參數表){……}
這裏的static不是指存儲方式而是指函數作用域僅侷限於本文件(.c文件)。

內部函數優點:不同的人編寫不同的函數不用擔心自己定義的函數會與其他文件中的函數同名,因爲同名也沒有關係(這在多人合作的項目中具有非常重大的意義)。
2.2 外部函數

如果在一個源文件中定義的函數,可以被文件外的函數調用,這種函數成爲外部函數,外部函數不需要加關鍵字static,或者我們可以使用關鍵字extern(表示是外部函數):

[extern] 函數類型 函數名(函數參數表){……}
外部函數雖然可以被外部文件使用,但是使用之前需要進行聲明,例如:

void temp(void)
{
    extern void input(…),process(…),output(…);
    input(…);
    process(…);
    output(…);
}

但是實際上,我們通常是不加static來定義函數(也不家extern,默認就是外部的),然後我們在.h文件中進行聲明,通過包含頭文件的方式來使用。
3 static在變量中的應用

我們在函數中常常遇到一個情況,希望函數中的局部變量的值在函數調用結束後不消失而繼續保留原值,即其佔用的存儲單元不釋放,在下一次再調用該函數時,該變量已有值(就是上一次函數調用結束時的值)。這時就應該指定該局部變量爲“靜態局部變量”,用關鍵字static進行聲明。用靜態存儲要多佔內存(長期佔用不釋放,而不能像動態存儲那樣一個存儲單元可以先後爲多個變量使用,節約內存),而且降低了程序的可讀性,因此若非必要,不要多用靜態局部變量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章