版权声明: https://blog.csdn.net/Wang_Jiankun/article/details/82146605
C++ 关键字 extern
extern 是计算机语言中的一个关键字,可置于变量或者函数前,以表示变量或者函数的定义在别的文件中。提示编译器遇到此变量或函数时,在其它模块中寻找其定义,另外,extern也可用来进行链接指定。
1、extern 变量
B文件使用A文件的变量:
// 在A文件定义一个变量:
int a = 0;
// 在B文件声明变量:
extern int a;
- 共享的变量定义只能出现一次,但可以在不同文件中声名多次
- 定义共享变量必须初始化
- 声名共享变量时不能初始化
- extern int a = 0;是定义变量,而不是声名
2、extern 函数
B文件使用A文件的函数:
实际上函数的声明和定义都不需要添加extern关键字,在实际使用的时候也最好不要添加关键字。函数加extern 可以取代 include “*.h” 来声明函数。
// 下面两个函数定义等价
extern int func(void)
{
return 0;
}
int func(void){
return 0;
}
// 下面两个函数声名等价
extern int func(void);
int func(void);
3、extern const 变量
共享常变量:
常变量默认是静态声明的,所以定义和声名常变量多要加extern
// 在A文件定义一个变量:
extern const int a = 0;
// 在B文件声明变量:
extern const int a;
4、extern “C”
在C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况,通过 extern “C” 显示声名用C语言规则编译该函数。
// 在.h文件的开头的地方
#ifdef __cplusplus
#if __cplusplus
extern "C"{
#endif
#endif /* __cplusplus */
…
程序语句
…
//.h文件结束的地方
#ifdef __cplusplus
#if __cplusplus
}
#endif
#endif /* __cplusplus */