C中的局部静态变量范围[重复]
Posted
技术标签:
【中文标题】C中的局部静态变量范围[重复]【英文标题】:Local static variable scope in C [duplicate] 【发布时间】:2014-10-25 07:54:23 【问题描述】:我有一个关于静态变量的简单问题。如果我在函数中声明了一个静态变量:
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
值存储在哪里。是像全局变量一样的静态变量。
【问题讨论】:
Is static is like global variable.
不!!!!使用寿命相同。可见度不同。
请先修正语法错误,再去哲学问题:)
C 规范没有说明变量必须存储在哪里,只是局部静态变量的生命周期贯穿整个程序。但是,编译器通常将局部静态变量与全局变量一起存储。
还有那个代码有一个无限循环,请先处理这些事情
'很好奇你有void main()
,它是非标准的,只在带有Microsoft C 编译器的Microsoft Windows 上有效,你有int fun()
并且不使用它的返回值。拥有int main(void)
和void fun(void)
会更正统——尽管如果你更改了它的签名,你必须在main()
之前定义或声明fun()
(尽管诸如MSVC 之类的C89 编译器不介意隐式int
函数规则,但这是 25 年前的标准,15 年前的 C99 标准禁止函数的隐式声明)。
【参考方案1】:
函数在返回时不会在fun()
内释放i
。 i
的存储空间与全局变量在同一个区域中——但它不是全局变量。它只能在定义它的函数fun()
内访问。它独立于任何全局变量 i
或任何其他在任何其他函数(在任何源文件中)内是静态的变量 i
,或与源文件中的文件范围静态变量 i
是分开的,其中 fun()
是定义。它的生命周期与程序一样长。
【讨论】:
【参考方案2】:据我所知,该函数将在返回后释放 - 否。我认为你的假设是错误的!
static
变量在从函数返回后不会被释放。
它存储在哪里? — static
变量存储在“数据段”或“数据存储器”中。
生命周期 — static
变量的生命周期从程序加载到 RAM 时开始,到程序执行完成时结束!
【讨论】:
以上是关于C中的局部静态变量范围[重复]的主要内容,如果未能解决你的问题,请参考以下文章