extern-外部变量

  前两天被同学问起extern的用法,才发现自己对extern的用法也不清晰,囧,整理一下。

参考链接

when to use extern in C++

extern

  extern用于多文件编程时,不同源文件之间共享变量。我们在头文件中声明外部变量,这样所有包含该头文件的的源文件就都有了这个外部变量的声明,而我们只需要在其中一个源文件中定义一次。
  extern int x告诉编译器有一个叫xint型变量在某个地方,正如之前C语言编译连接过程里说的那样,此时编译器并不关心x的具体实现,即不关心x定义在哪个源文件中。编译器只需要知道这个变量的类型和名字,就知道了该如何使用它。编译完成生成之后,链接器会将所有引用x的地方定向到定义它的某一个源文件中。
  为了使上述过程顺利进行,x必须要在某个源文件中被定义为全局变量,并且不能包含static关键字。

例子

print.h

1
2
3
4
5
6
7
#ifndef _PRINT_H
#define _PRINT_H

extern int global_x; //任何包含这个头文件的源文件都将可以使用global_x变量
void print_global_x();

#endif

print.c

1
2
3
4
5
6
7
8
#include <stdio.h>
#include "print.h"

int global_x; //global_x的具体定义的位置

void print_global_x(){
printf("%d\n", global_x);
}

main.c

1
2
3
4
5
6
7
8
#include "print.h"  //头文件中包含global_x的声明

int main(){
global_x = 5;
print_global_x();

return 0;
}