据我所知,应该使用 extern 关键字进行声明,并且任何值都不能与使用 extern 关键字声明的变量相关联。但是假设我写了这样的声明
extern int i = 10;
编译器是否应该为此标记错误?我看到一些编译器容忍并忽略了这一点?为什么会这样? “C”标准对此有何看法?
编辑:@All,感谢您的回答。我仍然有疑问。假设我在另一个文件中有这个变量的定义而没有外部链接,比如 a.c 并且我在 b.c 中添加了这个语句。编译器不标记错误仍然可以吗?它会被重新定义吗?
最佳答案
这是有效的语法,在 C99 标准中甚至有一个基本相同的示例。 (参见§6.9.2-4。)
这些示例确实不是规范的,但我相信它旨在成为合法的语法。编译器通常会输出警告,因为它并没有真正完成任何事情。
4 示例 1
int i1 = 1; // definition, external linkage
static int i2 = 2; // definition, internal linkage
extern int i3 = 3; // definition, external linkage
int i4; // tentative definition, external linkage
static int i5; // tentative definition, internal linkage
int i1; // valid tentative definition, refers to previous
int i2; // 6.2.2 renders undefined, linkage disagreement
int i3; // valid tentative definition, refers to previous
int i4; // valid tentative definition, refers to previous
int i5; // 6.2.2 renders undefined, linkage disagreement
extern int i1; // refers to previous, whose linkage is external
extern int i2; // refers to previous, whose linkage is internal
extern int i3; // refers to previous, whose linkage is external
extern int i4; // refers to previous, whose linkage is external
extern int i5; // refers to previous, whose linkage is internal
关于c - 与extern关键字使用相关的疑问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2348700/