extern关键字置于变量或函数前,用来标志变量或函数的定义在其它文件中,当编译器遇到被extern修饰的变量或函数时,会到其它文件寻找其定义。
1.extern 关键字与全局变量。
1.1在main.h中声明变量extern int a;
//main.h
extern int a;
在main.cpp中包含main.h头文件,就可以使用全局变量a.
//main.cpp
#include"main.h"
#include"iostream"
using namespace std;
int main()
{
int a;//在main.h中,extern int a是声明,不是定义,系统并未给变量a分配内存。所以,变量需要在外部定义。
cout<<a<<endl;
return 0;
}
1.2 在testc.cpp中定义变量b;
//test.cpp
int b=10;
在main.cpp中使用变量b
//mian.cpp
extern int b;
int main()
{
cout<<b<<endl;
return 0;
}
2.extern关键字与函数
在.h文件中,声明函数extern void fun(),在.c文件中实现void fun(),但是extern可以省略,一般不写。
3.extern “C”
extern "C"的主要功能是为了能够正确实现C++代码调用C语言代码。
因为cpp有函数重载机制,其对函数进行编译时,会对函数的返回值,函数名,形参类型,形参顺序,形参个数进行处理,比如在c++中,函数 void fun(int a,char b),被c++编译器编译后,可能为void_fun_int_char,而在C语言中,被c编译器编译后,可能为_fun。C语言与c++对函数的处理机制不同,如果,一段c的代码被c++编译,因为生成的函数名不同,会导致程序在链接阶段出错。
#ifdef __cplusplus//如果是c++编译器编译
exterc "C"//指定以下代码按照c语言的编译规则编译
{
#endif
//按照c语言的机制处理{}内的函数
#ifdef __cplusplus
}
#endif
#endif