在C中实际使用extern?

时间:2015-10-02 16:56:58

标签: c

C中extern的实际用途是什么?在跨多个文件使用时,全局变量不会相同吗?

文件head.h

int i;

这包含在多个文件中,并按预期工作。那么外部人员的适当用途是什么?

2 个答案:

答案 0 :(得分:3)

extern 声明一个全局变量(通常在头文件中)。它应该只在一个源文件中定义。否则,根据链接器的智能程度,最终可能会出现错误或同一变量的多个定义。但是,现代链接器可能会为您排序。

答案 1 :(得分:1)

您可以使用extern访问不同文件中的变量...

e.g。看到这个:

file1.c中

// Integer with external binding
int global1 = 10;
// REFERENCE to an external defined variable defined in file2.c
extern int global2;
// Integer with internal binding (not accessible with extern from other files)
static int internal1 = 20;

void print1() {
    printf("%d, %d, %d", global1, global2, internal);
}

file2.c中

// REFERENCE to an external defined variable defined in file1.c
extern int global1;  

// Integer with external binding
int global2 = 20;

void print2() {
    // you wont be able to reach internal1 here! Even with extern!
    printf("%d, %d", global1, global2);
}

你看,external关键字告诉编译器全局变量存在,但在另一个文件中。您可以引用在其他地方声明的变量(例如,在外部库或其他目标文件中。它的链接器内容)。此外,它将大大提高您的源代码的可读性,并有助于避免同名变量!使用它的好习惯......

顺便说一下:全局变量是默认值extern。添加static会将它们更改为内部变量!