【问题标题】:relation between static allocation and limited scope静态分配与有限范围的关系
【发布时间】:2017-09-14 22:09:18
【问题描述】:

C/C++ 中static 函数或全局变量的范围仅限于其编译单元。我找不到解释为什么..为什么静态分配限制了变量和函数的范围?谢谢

【问题讨论】:

  • 在这些情况下,“静态分配”不是 static 关键字的含义。
  • 你有误会。在文件范围内应用时,static 关键字表示静态链接,而不是静态存储持续时间。 (对于此类对象,静态持续时间总是如此。)静态链接表示标识符在当前翻译单元之外不可访问。因此,答案基本上是,“因为这就是 static 在这种情况下的意思。”
  • 谢谢@JohnBollinger,所以 static 关键字有两个不同的、不相关的含义?在全局变量和函数的上下文中,它是静态链接,而在函数中变量的上下文中,它是静态存储(对吗?)。静态存储和静态链接没有联系吗?
  • 如果信息太多,请阅读:en.cppreference.com/w/cpp/language/storage_duration
  • 谢谢@RichardCritten。这回答了我的问题“它们控制名称的两个独立属性:它的存储持续时间和它的链接。”虽然我对他们为什么选择一个词来控制这两件事很感兴趣。为什么静态存储和内部链接应该如此紧密地耦合?也许这是另一个问题..

标签: c scope static


【解决方案1】:

将变量或函数声明为“静态”指示编译器使这些符号对链接器不可见,从而允许您控制从编译单元外部可访问的内容。这可以帮助解决意外的名称冲突。 在类可用之前(在 C 中也称为),这一点更为重要,并且为了在 C++ 中向后兼容而被继承。

【讨论】:

  • C++ 20 多年来一直向后兼容 C。其中之一是static 对两种语言的某些声明具有非常不同的语义。
猜你喜欢
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
相关资源
最近更新 更多