extern除了能够用于声明变量,已经在外部被定义,不用重新定义和分配内存空间,还可以在C++与C进行相互函数调用方面会有很大的用处。
首先,我们来看一下,为什么C++和C语言不能相互进行函数调用:
编写如下的源文件:
分别存为test.cc,test.c,分别进行编译生成object文件:
使用nm命令查看生成的object文件的不同在哪个地方:
看出来了吧,C++编译器把参数信息编译后放到了函数的对象名字里面(为了实现多态),所以不能互相直接调用。
知道了原因,解决的办法自然就有了,只要告诉链接程序,你链接的object的命名方式,它就会帮你做不一样的查找,从而找到C或者C++里面的函数了。
比如:
要让C++能够调用C的函数:
main.cc
进行编译链接:
要让C能够调用C++的函数,稍微有些不同:
main.c:
需要修改test.cc的源文件:
就可以了