[英]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.