【发布时间】:2019-09-12 04:22:02
【问题描述】:
我在 stackoverflow 和其他网站上阅读了几个问题,在初始化全局变量时不能/不应使用 extern 关键字。但我想了解,为什么这是不可能的。
C 标准的哪些条款导致这是不可能的?我认为它隐藏在“6.7 声明”或“6.9 外部定义”部分中。我想我找不到合适的段落,因为我对其他部分的一些限制缺乏了解。
让我感到困惑的是“6.9.2 外部对象定义”部分的示例 1。在这里我在第 3 行找到
extern int i3 = 3; // definition, external linkage
这是使用extern 关键字初始化全局变量。但是示例或相关部分中没有任何词表明这不是“严格符合程序”。
代码示例:
extern int var = 5;
int main(void)
{
return var;
}
使用gcc -Wall -Wextra --pedantic -std=c11 file.c 编译此代码时,我收到以下警告(gcc 8.3.0):
file.c:1:12: warning: 'var' initialized and declared 'extern'
extern int var = 5;
^~~
【问题讨论】:
-
绝对的大脑/标准预告片。奇怪的是C11 Standard - 6.9.2 External object definitions(p4) 会使用示例
extern int i3 = 3;,它将调用一个常见的诊断......
标签: c language-lawyer c11