C/C++中extern的用法

--------------------------------------------------------------------------------

本文属作者原创,如有转载,请注明作者以及原址链接。

谢谢!                                                                                        

---------------------------------------------------------------------------------

1 基本解释:

  extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。另外,extern也可用来进行链接指定。以上内容是baidu的。

2 extern用法:

extern都是对全局变量而言的。

当你在main函数中定义了一个变量var时,该变量的作用域就是在main()函数中了,出了这个作用域,var就不起作用了,编译时会出现undefined reference to的错误。如果想将变量var在其他函数或作用域中同样可以使用,可将变量var声明为全局变量,这就用到了extern。

比如:

// test1.cpp 
int x = 10; 
// test2.cpp 注意在test2中并没有没有包含test1.cpp 
#include <iostream> 
using namespace std; 
extern int x;
int main ()
{
    cout << x << endl;
}
//输出结果为10 


3 extern需要注意的地方:

当一个extern变量需要在多个cpp文件中引用时,只需在一个地方使用extern声明一下这个全局变量即可,如果在多个文件中同时使用extern进行声明,程序在编译时会出现multiple definition的错误。

A.cpp
#inlcude C.h
int i;
-----------------------
B.cpp
#include C.h
extern int i;
-----------------------
C.h
int i;

4 extern c用法:

C++之父在设计C++之时,考虑到当时已经存在了大量的C代码,为了支持原来的C代码和已经写好C库,需要在C++中尽可能的支持C,而 extern "C"就是其中的一个策略。C++环境下可以对c的代码进行编译。使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,出现“undefined reference to”的错误,从而导致链接失败的情况。

C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,这是我们就需要使用extern “C”来对C语言的函数进行限定,这时我们告诉编译器,extern "C"修饰的变量和函数是按照C语言方式编译和连接的,不要给我生成用于链接的中间函数;从而就不会出现上述的错误了。

一般我们用下面的代码来对C++和C语言进行区分。

#ifdef __cplusplus
  extern "C"{
  	#endif
  	C函数/头文件声明;
  	#ifdef __cplusplus
  }

上面这段代码的意思是:

__cpluspluscpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入extern "C"{}来处理其中的C函数/头文件代码.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值