【问题标题】:C globally shared variable vs extern variable [duplicate]C全局共享变量与外部变量[重复]
【发布时间】:2013-06-24 14:00:56
【问题描述】:

这是一个理论问题: 假设我有 2 个源文件/编译单元,A.c 和 B.c

交流:

int x;

公元前:

int x;

变量 x 被认为是在对象之间共享的。也就是说,分配了一个 int 在某个地方,这个变量是全局的,对声明它的所有源文件都是可见的。

但是我也可以这样做: 公元前:

extern int x;

在这种情况下,外部变量和普通全局变量之间有什么区别吗? 一般有什么区别?

谢谢!!

【问题讨论】:

  • 更多信息请参见What are extern variables in C?。您的 A.c 和 B.c 代码(int x; 两次)仅用作公共扩展(在 C 标准的附件 J 中得到认可)。带有extern int x; 的变体符合标准的要求。

标签: c variables static global


【解决方案1】:

如果您在A.c 中有一个x 定义,在B.c 中有一个x 定义,则您的程序会调用未定义的行为。

某些工具链会通过在某些特定情况下定义未定义的行为来接受您的程序,但您不能对所有编译器都依赖它。

C99, 6.9p5) “如果在表达式中使用了用外部链接声明的标识符(而不是作为结果为整数常量的 sizeof 运算符的操作数的一部分),则在整个程序中的某处应准确标识符的外部定义一个;否则,不得超过一个"

【讨论】:

    【解决方案2】:

    不同之处在于它不会在没有extern 的情况下链接,你会得到一个多重定义错误。只有extern 的版本有效。

    【讨论】:

      猜你喜欢
      • 2015-08-19
      • 2017-08-19
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-15
      • 2015-06-12
      相关资源
      最近更新 更多