【问题标题】:How to share one static variable with multiple translation unit?如何与多个翻译单元共享一个静态变量?
【发布时间】:2011-11-10 02:04:03
【问题描述】:

我想将一个数组设为静态,并且还想在其他翻译单元中引用它。然后我将其定义为static int array[100] = {...},并在其他翻译单元中将其声明为extern int array[]。但是编译器告诉我,static和extern的存储类相互冲突,我怎么能通过它仍然达到我的目标?

【问题讨论】:

  • 您在什么时候决定需要“使数组静态化”?
  • @KerrekSB 我认为大多数人认为全局变量static 与创建类变量static 或在函数static 中创建局部变量的含义相同。这是一个可以理解的错误,但它甚至没有做到这一点。

标签: c++ c


【解决方案1】:

删除static。只需将int array[100] = {...}; 放在一个.cpp 文件中,并将extern int array[100]; 放在头文件中。

static 在这种情况下意味着其他翻译单元看不到它。这显然与extern 指令冲突。

【讨论】:

    【解决方案2】:

    static 在文件范围内几乎是汇编器的声明私有指令。在类或函数范围内,它肯定与static 不同。

    例如在 zlib 中,使用了#define LOCAL static。

    【讨论】:

    • 汇编器跟什么有什么关系?您指的是“链接器”吗?
    • 不,汇编程序。汇编器创建符号表。我确定gcc -c 和类似的不涉及链接器。
    • 我明白了。无论如何,语言标准中没有“组装阶段”,只有“链接类型”:-)
    【解决方案3】:

    与其将变量设为全局变量,不如考虑将其保留为静态并向其添加公共访问器和修饰符。直接耦合到其他模块中的裸变量并不是一件好事。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-20
      • 2011-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多