extern用于在多个文件中间中,定义一个全局变量或者函数。可以在其他文件中使用 extern 来得到一个已定义的变量或函数的引用。
extern用于函数声明
extern用于函数声明时,和普通的函数声明并没有区别。即extern int foo();和int foo();是一样的效果的。使用extern更多的是表示该函数在其他文件中定义。外部定义的函数一般都在 .h 文件中使用extern关键字声明。
extern用于变量声明
当你需要在多个文件中,使用一个全局变量时,你需要使用extern关键字来对全局变量进行声明。extern声明的全局变量一般放在.h文件中。
//demo.h
#ifndef DEMO1_H
#define DEMO1_H
extern int a;
#endif
//demo1.c
#include "demo.h"
a = 1;
void foo1(){cout << a << endl;}
//demo2.c
#include "demo.h"
void foo2(){cout << a << endl;}
我们在demo1.c和demo2.c中都可以访问到a这个变量。
注意:变量不可在头文件中定义。因为demo1.c和demo2.c都包含了demo.h,在demo.h定义a,会造成重复定义。但是,也别忘记在一个文件中第一变量,否则会造成未定义错误。
extern "C"用于C++中兼容C语法
由于c++生成符号表时,会把函数名和参数进行拼接来生成符号,所以c和c++混用,在链接时,会出现符号找不到的情况。此时使用extern ”C“{}来兼容c函数。
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
//代码段
#ifdef __cplusplus
}
#endif /* __cplusplus */