8、extern 解析与用法

基本解释
  extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
  另外,extern也可用来进行链接指定。使用extern时候要严格对应声明时的格式。
  extern用在变量声明中常常有这样一个作用,你在*.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在*.h中并用extern来声明。

2 问题:extern “C”
  在C++环境下使用C函数的时候,常常会出现编译器无法找到obj模块中的C函数定义,从而导致链接失败的情况,应该如何解决这种情况呢?
  C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间的函数名称,而C语言则不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,这告诉编译器,请保持我的名称,不要给我生成用于链接的中间函数名。
  下面是一个标准的写法:
//.h文件的头上
#ifdef __cplusplus
extern "C"{
 #endif
 
 
 //.h文件结束的地方
 #ifdef __cplusplus
}
#endif

问题:extern 函数
  如果函数的声明中带有关键字extern,仅仅是暗示这个函数可能在别的源文件里定义,没有其它作用。即下述两个函数声明没有明显的区别:
extern int f(); int f();
  当然,这样的用处还是有的,就是在程序中取代include “*.h”来声明函数

参考

1] http://www.cnblogs.com/luliang/archive/2008/08/21/1272746.html

2] http://blog.163.com/zhoumhan_0351/blog/static/399542272010410113356104/

3] http://blog.163.com/zhoumhan_0351/blog/static/39954227201002083420616/

  [4]   http://blog.csdn.net/Element768/archive/2005/12/04/543117.aspx

上一篇:常见的排序算法四——直接选择排序


下一篇:解开Android应用程序组件Activity的"singleTask"之谜(2)