extern "C"(外部链接C)

来源:互联网 发布:淘宝掌柜信用评分下降 编辑:程序博客网 时间:2024/04/28 13:04

    我想我们很多VC开发人员都会遇到extern "C"修饰的函数或者类等等吧。那究竟在vc++开发中为什么要用这个extern "C"呢?它究竟有什么作用呢?不用它又会怎么样呢?

     下面我就把对extern "C"的认识写下来,和大家分享一下,有不对的地方还请大家指出来,共同探讨进步!

extern "C"单就这个短语来看,我想我们大家应该都知道是什么意思。外部链接C,链接C什么呢,那当然是链接C库了。完整的意思就是外部链接C库。好了,这下我们应该大致知道它的用图了吧。为什么我们要在程序中外部链接C呢,无非不是我们程序需要调用C库具有的函数功能罢了。这样我们在写程序的时候,某些模块就不用自己花费精力花费财力去单独开发了,我们可以直接使用已有的而且经过严格考验的C库函数。所以一句话,用了extern “C”修饰的函数,意思就是说这个函数里面可能会用到C库中的某个函数,需要告诉编译器在编译的时候按照C风格的方式进行编译,这样在链接运行的时候连接器才能找到正确连接标识符。程序才能得以正常运行。

好了,上面说了extern “C”的作用。但是为什么会出现这种情况呢?原因是这样的,在c++中,为了支持重载机制,在编译生成的汇编码中,要对函数的名字进行一些处理,加入比如函数的返回类型等等.而在C中,只是简单的函数名字而已,不会加入其他的信息.也就是说:C++C对产生的函数名字的处理是不一样的。这样如果在c++中使用C库函数,如果不用extern “C”的话,那么那个C库函数经过编译就会得到与库中不一样的另一个名字,那么自然程序在进行链接的时候就找不到标识符,也就是我们经常遇到的链接错误问题了。如果你使用了extern “C”修饰,那么编译阶段就回按照C风格进行编译,那么编译产生的函数名自然就和库中函数名一样,这样程序在链接的时候当然就能正确的进行连接了。

还有就是因为C++之父在设计C++之时,考虑到当时已经存在了大量的C代码,为了支持原来的C代码和已经写好C库,需要在C++中尽可能的支持C,而 extern "C"就是其中的一个策略。所以在c++中才有了extern “C”这种外部链接C库的用法,用以达到CC++的互相调用和沟通。这样也就避免了大量重复代码的编制工作。

CC++对函数的处理方式是不同的.extern "C"是使C++能够调用C写作的库文件的一个手段,如果要对编译器提示使用C的方式来处理函数的话,那么就要使用extern "C"来说明。

 

 

原创粉丝点击