C/C++中extern的用法
来源:互联网 发布:php手机号正则表达式 编辑:程序博客网 时间:2024/06/05 04:01
--------------------------------------------------------------------------------
本文属作者原创,如有转载,请注明作者以及原址链接。
谢谢!
---------------------------------------------------------------------------------
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.hint i;-----------------------B.cpp#include C.hextern int i;-----------------------C.hint 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 }
上面这段代码的意思是:
__cplusplus是cpp中的自定义宏,那么定义了这个宏的话表示这是一段cpp的代码,也就是说,上面的代码的含义是:如果这是一段cpp的代码,那么加入extern "C"{}来处理其中的C函数/头文件代码.
- C中extern的用法
- extern "C"的用法
- "extern" C的用法
- extern C的用法
- extern "C"的用法...
- extern c 的用法
- extern "C"的用法
- extern "C"的用法
- extern “c”的用法
- extern "C"的用法
- extern "C"的用法
- extern "C"的用法
- extern "C"的用法
- extern "c"的用法
- extern "C"的用法
- extern "C"的用法
- extern "C"的用法
- extern “C”的用法
- assert()函数用法总结
- 基本分组背包
- 拖动视图,视图的父视图根据情况变化.
- 程序代码,常量,局部变量,全局变量在内存中的保存位置
- 重温C语言 - 编译连接与函数
- C/C++中extern的用法
- android Http通信开发详解
- C++异常处理
- XML 解析
- VC MFC 钩子 实现 自绘 窗体 标题栏 非客户区(VER.2013-11-06)
- subst 本地任意文件夹映射成盘符!
- 如何获得系统时间和日期-ios培训
- Mac下Eclipse无论怎么运行程序结果都不变的解决方法
- WM_CTLCOLOR、WM_PAINT、WM_CTLCOLOR的关系