extern关键字总结

来源:互联网 发布:保持数据库数据一致性 编辑:程序博客网 时间:2024/05/21 22:54

时间:2014.06.04

地点:基地

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

一、extern 变量和extern 函数

  在这两种场合下,extern是用来说明变量或者函数的定义存在于其它源文件里,在这里只是声明,我们知道,变量或者函数是可以有多个声明的,但不可以有多个定义,以这种方式而不是用#include的方式来引用其它文件中的函数,在链接时,连接器会在各个模块中搜索这个变量或者函数形成最终的链接,以形成合理的需求。
--------------------------------------------------------------------

二、extern "C"

在C++程序需要调用C程序时,此时编译过程中常发生编译器找不到C函数的问题,导致链接失败,于是引用extern "C"这样的方式,以解决这种链接失败的问题。我们知道,C++语言中有函数重载,所以比如g++在安装C++在编译时,不会直接使用程序中书写的函数名称,而会使用一种特殊的方法经过中间变换生成一个全局唯一的函数名,而C函数在编译时是没有经过函数名称变换得来的,当在C++中使用经过变换的函数名称去调用没有经过变换过的函数时,会出现链接失败。C++编译过程中,函数名称的转换称为“函数的特殊处理”,比如将函数名称和参数联合起来生成一个中间的函数名称。而C语言不会,因此会造成链接时找不到对应函数的情况,此时C函数就需要使用extern "C"进行链接指定了,用来告诉编译器,这是一个C写成的库文件,要用C的方式来链接它。即带extern "C"的代码在处理函数名称时,直接使用函数名称,不会去采用特别的方法生成中间函数名称,所以C++在使用C函数时,加上extern “C”才能正确的找到指定的函数。
0 0
原创粉丝点击