AFAIK,extern关键字应该用于声明,并且没有值可以与使用extern关键字声明的变量相关联.但是假设我写了一个类似的声明
extern int i = 10;
Run Code Online (Sandbox Code Playgroud)
编译器是否应标记相同的错误?我看到一些编译器容忍并忽略了这一点?为什么会这样?"C"标准对此有何评价?
编辑:@All,谢谢你的回答.我仍有疑问.假设我有这个变量的定义而没有另一个文件中的extern链接说ac和我在bc中添加这个语句仍然可以让编译器不标记错误吗?它是否会被重新定义?
这是有效的语法,在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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
831 次 |
| 最近记录: |