簡體   English   中英

C中的靜態局部變量是什么意思?

[英]what's the meaning of a static local variable in C?

 BOOL foo(void){

    static BOOL displayed = FALSE;
    static BOOL initialized = FALSE;

    if (displayed)
        return FALSE;

    //more code 

    displayed = TRUE;
    return FALSE;
}

C中的靜態局部變量是什么意思?

如果第二次調用此方法, displayed將不會重新初始化為FALSE?

靜態局部變量僅在程序啟動之前初始化一次。 然后,它們的值在兩次調用之間仍然存在。

根據標准,第6.2.4 / 3節“對象的存儲期限”:

聲明了其標識符而沒有存儲類說明符_Thread_local且具有外部或內部鏈接或具有存儲類說明符靜態的對象的對象具有靜態存儲持續時間。 它的生命周期是程序的整個執行過程,並且在程序啟動之前,它的存儲值僅初始化一次。

靜態變量僅初始化一次。 這可以用於特殊情況下,例如計算函數的運行時執行次數。 靜態變量的壽命與全局變量相同。 但是它們的范圍僅限於定義的地方。

初始化僅在編譯器分配內存時執行一次。 該變量在程序執行期間保留其值。

靜態自動變量即使在其定義的塊終止后仍繼續存在。 因此,函數中的靜態變量的值將在重復調用同一函數之間保留。 靜態自動變量的范圍與自動變量的范圍相同,即,它在定義它的塊中是局部的。 但是,分配的存儲將在程序執行期間永久保存。 靜態變量可以在它們的聲明中初始化; 但是,初始化程序必須是常量表達式,並且當為靜態變量分配內存時,初始化僅在編譯時進行一次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM