extern
是 C 中的一个存储类。它究竟是如何工作的?下面给出的代码的输出是 20。这是怎么输出的?
#include <stdio.h>
int main()
{
extern int a;
printf("%d", a);
return 0;
}
int a=20;
这意味着三件事:
extern
, 或带有初始化程序,或者在您的情况下,两者都有)。具体来说,您extern int a;
声明该变量存在,但当时没有定义它。此时,您可以使用它,链接器将确保您的使用引用了定义。然后你有所需的定义,int a=20;
最后,一切都很好。
extern
在这种情况下,表示符号a
是在不同的位置定义的,例如不同的模块。因此,链接器在所有链接的模块中查找具有相同名称的符号,如果存在,则将地址设置为本地变量a
,并将地址设置为外部定义的变量。由于您在函数a
外部定义了另一个变量,因此函数内部(基本上)与外部变量相同。main()
a
main()
由于全局a
是在主函数执行之前初始化的,所以在您访问它时该值是 20。
extern means i declare a variable, just like you implement a function in a source file and declare the prototype in a header to allow other source file to use it.
If you put a global variable in a source file, and use a header to declare it with the extern keyword, each source file including the header will see the variable.
The linker will do the job to tie everything just as it does with functions
extern
作为存储类说明符告诉编译器被声明的对象不是新对象,而是在别处有存储,即在别处定义。你可以用你的代码尝试这个实验,看看它是如何工作的。extern
在 in 的声明中int a
省略关键字main()
。然后您printf()
将打印一些垃圾值,因为它将是int
具有相同标识符的新定义,这将隐藏在a
其他地方声明的全局。
你extern
用来告诉编译器该变量是在别处定义的。如果没有extern
在您的程序中,编译器将在您的函数中定义另一个变量a
(除了全局范围内的 this),该变量将在未初始化的情况下打印。main()