BOOL foo(void){
static BOOL displayed = FALSE;
static BOOL initialized = FALSE;
if (displayed)
return FALSE;
//more code
displayed = TRUE;
return FALSE;
}
C中静态局部变量的含义是什么?
如果第二次调用此方法,displayed
将不会重新初始化为FALSE?
答案 0 :(得分:4)
静态局部变量仅在程序启动之前初始化一次。然后他们的价值观在调用之间持续存在。
从标准6.2.4 / 3节对象的存储持续时间:
在没有存储类说明符的情况下声明其标识符的对象 _Thread_local,可以是外部或内部链接,也可以是存储类 说明符静态,具有静态存储持续时间。它的一生就是整个执行 在程序启动之前,程序及其存储的值只初始化一次。
答案 1 :(得分:1)
静态变量只初始化一次。 这可以在特殊情况下使用,例如计算函数的运行时执行次数。 静态变量的生命周期与全局变量相同。但它们的范围仅限于定义的范围。
答案 2 :(得分:0)
初始化仅在编译器分配内存时执行一次。该变量在程序执行期间保留其值。
答案 3 :(得分:0)
即使在定义它们的块终止后,静态自动变量仍然存在。因此,在对同一函数的重复函数调用之间保留函数中的静态变量的值。静态自动变量的范围与自动变量的范围相同,即它是定义它的块的本地变量;但是,分配的存储在程序期间变为永久存储。静态变量可以在其声明中初始化;但是,初始值设定项必须是常量表达式,并且在为静态变量分配内存时,只在编译时进行一次初始化。