1、声明外部的变量
由于编译是对单个的文件进行编译,所以在编译一个a.cpp文件的时候,若是要在a.cpp中使用b.cpp中的变量,直接使用则编译肯定会报错的,所以这个时候应该用extern修饰在a.cpp中所使用的b.cpp中的变量,这个时候编译器会忽略这个错误,直到链接的时候("将文件融为一体")会找到b.cpp中的变量,这样便ok了。extern的作用相当于让编译器在编译阶段忽略这个错误
例
//a.cpp
extern int a; //并未分配空间,只是通知编译器,在其它文件定义过
printf("%d",a);
//b.cpp
int a = 9;
2、在C++文件中另一个C++文件中的函数
和第一点是一样的,a.cpp中调用b.cpp中的函数,需要在a.cpp中申明函数是extern的
3、在C++文件中调用C方式编译的函数
主要原因是C++在编译后生成的函数名和C的函数名不一样的,需要有一个转化过程,在C++中通过extern "C"修饰函数,可以表明这个函数是C编译的,命名规则就符合C。
//a.cpp C++编译
extern "C" //不加会报错,提示找不到该函数
{
void print();
}
void main()
{
print();
}
//b.cpp C编译
void print()
{
printf("123456");
}