首页 > 学院 > 开发设计 > 正文

extern "C"的作用

2019-11-06 06:03:32
字体:
来源:转载
供稿:网友

extern"C"的作用:

(1) extern "C"使得在C++中使用C编译方式成为可能,指明该函数使用C编译方式。

(2) 使用extern"C" __declspec(dllexport)声明导出函数,在DLL中的函数名字保持与导出函数名一致。

(3) 使用__declspec(dllexport)声明导出函数,在DLL中的函数名字与导出函数名字不一致,有变化。这些差异主要是使用C方式还是C++方式编译导致的。

(4) 使用_declspec (dllexport) 时cpp文件在编译为OBJ文件时要对函数进行重新命名,C语言会把函数name重新命名为_name,而C++会重新命名为_name@@decoration,在其前面加上extern "C"表示用C语言的方式重命名导出函数。

(5) 比如一个C语言源程序A.c要使用C++编写的库函数,在A.c中#include"B.h",其中B.h中有要使用的函数的原形声明func。当编译链接源程序时,却发现了“链接错误,未决的外部符号...”的错误,这是什么原因呢?

原因就是,C编译器编译A.c时,将func编译为func,当链接时链接器去C++库中寻找func,但是C++的编译器在编译库时将func编译成_func@yyy@rrr,自然链接器就找不着相应的函数的信息了,所以就会报错!有什么办法可以处理这种情况呢?——可以在编写C++库的时候,为导出函数加上extern "C",它的含义是告知C++编译器在编译这些函数的时候,以C编译器的方式处理函数名。这样生成的库中的函数名字就是func了,当C程序调用库函数,编译链接时,链接器就能找到期望的信息,则链接成功。


上一篇:C语言 存储类说明符

下一篇:签名

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表