【问题标题】:Are global static variables within a file comparable to a local static variable within a function? [closed]文件中的全局静态变量是否可以与函数中的局部静态变量相媲美? [关闭]
【发布时间】:2016-01-06 15:41:29
【问题描述】:

我知道将全局变量声明为 STATIC 会使其对当前文件可见。每次在文件中调用函数时,变量是否保留其数据?

例如,

假设下面的一些文件调用func1(),它修改了静态全局变量数据,然后调用func2()再次修改它。

下次文件调用 func1() 时,它会修改一个新的数据变量结构吗?还是会保留第一次调用中修改过的数据?

STATIC MY_DATA  Data1;

void func1( ){
   //modify Data1
   func2(Data1);
}

void func2 (MY_DATA data){
    // modify data 
}

【问题讨论】:

  • 你为什么不测试一下看看;)?
  • 从来没有(从来没有*)问过软件开发问题,而自己更容易尝试。通过提问,你会学到很多东西。
  • 请注意,没有限定符 STATIC。我想你问的是关键字static
  • 嗯?这个问题是如何基于所有意见的?也许它应该关闭,但不是因为这个原因。

标签: c variables static global


【解决方案1】:

关键字static 在文件范围内的含义与在本地范围内的含义不同。

在文件范围内,static 声明内部链接。这意味着只有同一翻译单元中的其他代码才能看到声明的变量(或函数);如果相同的名称出现在不同的文件中,则它指定一个单独的变量(函数)。相反的是外部链接,您可以通过 extern 关键字显式声明。此外,在函数范围内声明的变量具有 no 链接——它们只能在声明它们的函数内访问。

另一方面,在本地范围内,static 声明 静态存储持续时间,而不是默认的自动持续时间。具有静态持续时间的变量在程序启动时初始化,并在函数调用中保留其值,这与具有自动持续时间的变量不同。

在文件范围内声明的所有变量和所有函数都具有静态持续时间,因此尽管可能会造成混淆,但在不同的上下文中为这两个不同的目的使用相同的关键字并没有本质的歧义。

就您的示例而言,无论您的文件范围变量是否声明为static,它都具有静态存储持续时间。因此,它的值将在函数调用中保持不变,并且同一文件中的所有函数都可以随时访问其当前值。如果它没有声明为static,那么它也可以被其他函数访问。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-12
    • 2016-07-26
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 2011-05-12
    • 1970-01-01
    相关资源
    最近更新 更多