【问题标题】:C local and global static variablesC 局部和全局静态变量
【发布时间】:2015-10-04 06:24:39
【问题描述】:

我的理解是局部静态变量具有“程序范围”;也就是说,一旦定义它就会一直存在,直到程序终止。此外,我的理解是,本地静态也可以在当前模块/C 文件之外访问,它们在其中定义:

void doSomething() {
    static int myVar = 5;   // Program scope & accessible to other modules
}

我的理解是全局静态变量也有程序范围,但它们只对当前模块/C文件可见:

static int myVar = 5;       // Program scope but "module private"
void doSomething() {
    // Whatever here...
}

这不是有点倒退吗?我原以为情况会相反。所以我问:我上面的理解正确吗?如果是这样,那么在当前模块之外可以访问局部静态变量而不是全局静态变量的动机是什么?

【问题讨论】:

    标签: c global-variables static-variables


    【解决方案1】:

    你搞砸了。静态局部变量是对其他函数隐藏数据但保留数据以供将来调用该函数的地方。

    静态全局变量有

    • 静态存储时长(保留数据以备将来调用)
    • 内部链接(变量仅限于单个文件)和
    • 文件作用域(仅在当前文件中可以引用变量)

    静态局部变量有

    • 静态存储时长
    • 没有链接
    • 块范围

    【讨论】:

      【解决方案2】:

      不。局部静态变量可在给定模块中访问。

      虽然全局静态变量可以在给定的 C 文件中访问。

      【讨论】:

        【解决方案3】:

        局部静态变量的作用域仅限于函数。
        如您所见,以下代码会产生编译错误,因为它试图从 main 访问“prox”变量,即使它是静态的。

        int main(void)
        {
        test();
        printf("The PROX is : %d", prox);
        }
        
        test()
        {
        static prox;
        prox=prox+5;
        printf("INSIDE prox[%d]",prox);
        }
        

        【讨论】:

          猜你喜欢
          • 2015-06-12
          • 2012-08-24
          • 1970-01-01
          • 2023-03-29
          • 2011-04-27
          • 2012-06-18
          • 2022-01-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多