extern

externstatic 不能同时出现

extern 放在变量之前

标示变量定义在别处

看看如下的声明和定义:

extern int a;       /* 声明一个全局变量 a */
int a;              /* 定义一个全局变量 a */
extern int a = 0;   /* 定义一个全局变量 a 并赋初值 */
int a = 0;          /* 定义一个全局变量 a 并赋初值 */

extern int a = 0;int a = 0; 的作用是相同的
定义只能出现一次,声明可出现多次,所以只有 extern int a; 可出现多次

extern 用在变量声明中常常有这样一个作用:
*.c 文件中定义了一个全局的变量,这个全局的变量如果要被引用, 就放在 *.h 中并用 extern 来声明

extern 放在函数之前

void mwum(void);
extern void mwum(void);

对于以上两条语句,效果是一样的
extern 是用来告诉编译器函数定义是在别处,这里只是声明。 但是对于函数来说,如果函数没有写函数体而是直接跟了一个 ;, 那么编译器就知道这是个声明,反观变量是不一样的,所以对于函数来说 extern 是默认的

在头文件中的声明一般不加 extern