c - 在翻译单元中使用 extern

标签 c extern linkage

extern int a;
int a = 1;

int main(void)
{
  return 0;
}

这是UB吗?标准在6.2.2/7中说

如果在一个翻译单元中,相同的标识符同时出现在内部和外部 链接,行为未定义。

最佳答案

这是完美定义的行为。这就是包含 header 后编译器在预处理后得到的结果。

你的困惑似乎来自于:

int a = 1;

没有内部链接。在文件范围 a 有外部链接。如果添加了 static 说明符,它将具有内部链接。

关于c - 在翻译单元中使用 extern,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14499689/

相关文章:

c - 在两个代码中错误地使用了 C 中的 extern

C - 如何使用外部变量

c - 如何在C99中定义一个函数为inline internal and external copy

c++ - 是否有可能让持久的 cuda 内核运行并与 cpu 异步通信?

在 Mac OS X 下编译 Linux 程序

c++ - size_t 是字长吗?

c++ - 在这种情况下,关于语言链接,GCC 和 clang 是否显示与 Visual Studio 相同的结果?

c - 如何使用 css 降低 gtk 对话框的标题栏高度?

c - 将映射地址声明为外部地址

c++ - 带 extern 和不带 extern 的函数的局部/ block 作用域声明之间的区别