这看起来很微不足道,但对以下行为的严格解释将有助于我的理解extern
很多。所以我会很感激你的回答。
在下面的示例程序中,我声明了一个extern
多变的x
在函数内部(main()
)。现在,如果我在文件范围内定义变量main()
并分配8
到它,那么程序就可以正常工作并且8
被打印。但是如果我定义变量x
inside main()
之后printf()
,期待extern
声明链接到它,然后它失败并给出以下错误:
test.c||In function 'main':|
test.c|7|error: declaration of 'x' with no linkage follows extern declaration|
test.c|5|note: previous declaration of 'x' was here|
||=== Build finished: 1 errors, 0 warnings ===|
#include<stdio.h>
int main()
{
extern int x;
printf("%d",x);
int x=8; //This causes error
}
//int x=8; //This definition works fine when activated
我在代码中只看到一个错误,即该语句int x=8
意味着我们正在声明x
再次作为变量auto
存储类。其他我不明白。你能告诉我以下内容吗:
1)为什么我们可以声明extern
多变的inside一个函数,没有任何警告或错误?如果有效,它到底意味着什么?
2)自从我们宣布x
as extern
在函数内部并且没有显示错误,为什么这个声明不链接到函数内部变量的定义,而是在外部定义变量时查看外部?存储类声明是否冲突auto-vs-extern
这是为什么?
extern
变量声明是对编译器的承诺,即存在一个变量的定义global变量在其他地方。局部变量不符合对编译器的承诺,因为它们对链接器是不可见的。从某种意义上说,extern
声明类似于函数的前向声明:您对编译器说“我知道这个函数在那里,所以让我现在使用它,并让链接器负责定位实际的实现”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)