实际使用关键字extern

时间:2018-05-05 19:33:54

标签: c

我编写了以下3 C源文件来测试extern关键字 在C:

的main.c

MyHelpers.foo

main2.c

#include<stdio.h>
extern int var;
int main()
{
   var = 10;
   printf("%d %p",var,&var);
   var = 20;
}

other.c

#include<stdio.h>
extern int var;
int main()
{
    printf("%d %p",var,&var);
}

我分别编译了两个文件main.c和main2.c,但也链接了 每个

的other.c文件

在运行第一个程序时,我得到以下输出: 10 0x8049660

但是在运行第二个之后,我得到了这个: 0 0x8049660

很明显,这两个var指的是同一个地址 使用extern关键字的重点。

但为什么它又被初始化为0?

此外,如果我运行第二个程序而不运行第一个程序,我得到 相同的输出。

为什么会这样?

1 个答案:

答案 0 :(得分:3)

关键字extern不是用于在不同程序之间共享变量,也不是用于在同一程序的连续运行之间共享变量。声明为extern的变量只表示此变量在同一程序的另一个转换单元中定义,并且此变量的值仅在此程序运行中共享。

请注意,other.cmain.c是两个与相同的程序相关联的翻译单元,例如main.exe。在main.exe的一次运行中,var的值将在other.cmain.c之间共享,地址将相同。对于main.exe的第二次运行,您可能会收到不同的地址,即&var与第一次运行时的值不同。