c - 与extern关键字使用相关的疑问

标签 c extern

据我所知,应该使用 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/

相关文章:

c - 如何在C编程中将int转换为Double

c - 关于短路评估的安全问题

使用指针数组调用函数

c++ - 关于c++命名约定的问题

c++ - 从另一个文件访问 C++ 中的外部变量

c++ - extern 在 C++ 中如何工作?

c - free 会导致内存损坏

c - 程序运行然后说它停止工作

c++ - 证明两个代码块在功能上是相同的?

c++ - 从 Julia 调用 C/C++