【问题标题】:Local static variable scope in C [duplicate]C中的局部静态变量范围[重复]
【发布时间】: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 标准禁止函数的隐式声明)。

标签: c


【解决方案1】:

函数在返回时不会在fun() 内释放ii 的存储空间与全局变量在同一个区域中——但它不是全局变量。它只能在定义它的函数fun() 内访问。它独立于任何全局变量 i 或任何其他在任何其他函数(在任何源文件中)内是静态的变量 i,或与源文件中的文件范围静态变量 i 是分开的,其中 fun() 是定义。它的生命周期与程序一样长。

【讨论】:

    【解决方案2】:

    据我所知,该函数将在返回后释放 - 。我认为你的假设是错误的!

    static 变量在从函数返回后不会被释放。

    它存储在哪里?static 变量存储在“数据段”或“数据存储器”中。

    生命周期static 变量的生命周期从程序加载到 RAM 时开始,到程序执行完成时结束!

    【讨论】:

      猜你喜欢
      • 2013-02-15
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2018-04-18
      • 2012-11-05
      • 1970-01-01
      • 2014-05-02
      • 1970-01-01
      相关资源
      最近更新 更多