gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 00:33:35 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com