C中静态局部变量的含义是什么?

时间:2014-03-19 12:25:53

标签: c static

 BOOL foo(void){

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

    if (displayed)
        return FALSE;

    //more code 

    displayed = TRUE;
    return FALSE;
}

C中静态局部变量的含义是什么?

如果第二次调用此方法,displayed将不会重新初始化为FALSE?

4 个答案:

答案 0 :(得分:4)

静态局部变量仅在程序启动之前初始化一次。然后他们的价值观在调用之间持续存在。

从标准6.2.4 / 3节对象的存储持续时间:

  

在没有存储类说明符的情况下声明其标识符的对象   _Thread_local,可以是外部或内部链接,也可以是存储类   说明符静态,具有静态存储持续时间。它的一生就是整个执行   在程序启动之前,程序及其存储的值只初始化一次。

答案 1 :(得分:1)

静态变量只初始化一次。 这可以在特殊情况下使用,例如计算函数的运行时执行次数。 静态变量的生命周期与全局变量相同。但它们的范围仅限于定义的范围。

答案 2 :(得分:0)

初始化仅在编译器分配内存时执行一次。该变量在程序执行期间保留其值。

答案 3 :(得分:0)

即使在定义它们的块终止后,静态自动变量仍然存在。因此,在对同一函数的重复函数调用之间保留函数中的静态变量的值。静态自动变量的范围与自动变量的范围相同,即它是定义它的块的本地变量;但是,分配的存储在程序期间变为永久存储。静态变量可以在其声明中初始化;但是,初始值设定项必须是常量表达式,并且在为静态变量分配内存时,只在编译时进行一次初始化。