Local static variable scope in C
我有一个关于静态变量的简单问题。如果我在函数中声明了一个静态变量:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| void main ()
{
int k = 0
while(k <=4)
{
fun ();
k ++;
}
}
int fun ()
{
static int i =5;
i ++;
printf(Value %d\t ", i);
return 0;
} |
如我所知,函数返回后将取消分配。但i值存储在哪里?是静态变量,类似于全局变量。
- 不!!!!!在使用寿命方面是一样的。在可见性方面是不同的。
- 请先纠正语法错误,然后转到哲学问题:)
- C规范并没有说明变量必须存储在哪里,只是说明局部静态变量的生存期在整个程序中。然而,编译器通常将局部静态变量和全局变量一起存储。
- 另外,代码有一个无止境的循环,请先处理这些事情。
- 很奇怪,您有一个非标准的void main(),它只在带有Microsoft C编译器的Microsoft Windows上有效,您有一个int fun(),不使用它的返回值。如果你改变了main()的签名,那么使用int main(void)和void fun(void)会更为正统,尽管你必须在main()之前定义或声明fun()(尽管像msvc这样的c89编译器并不介意隐式的int函数规则,但是这是一个25年前的标准,而15年前的c99标准已经禁止了我函数的MPlicit声明)。
函数在返回时不会在fun()内释放i。i的存储与全局变量位于同一个通用区域,但它不是全局变量。它只能在定义它的函数fun()中访问。它与在任何其他函数(在任何源文件中)内是静态的任何全局变量i或任何其他变量i分离,或与定义fun()的源文件中的文件范围静态变量i分离。它的生命周期和程序一样长。
如我所知,函数返回后将取消分配-不,我认为您的假设是错误的!
从函数返回后,不会释放static变量。
它存放在哪里?-static变量存储在"数据段"或"数据存储器"中。
Life—当程序加载到RAM时,static变量的寿命开始,当程序执行完成时结束!