博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
每周总结-----不同编程语言互相调用的本质
阅读量:2444 次
发布时间:2019-05-10

本文共 778 字,大约阅读时间需要 2 分钟。

造成不同编程语言不能之间互相调用的原因是:编译器对每个函数的解释不同,会翻译成不同的符号表

假如有一个函数 int a(int b);c编译器会直接翻译成_a()c++会翻译成_int a(int),这也是c++能支持重载的原因

extern C 是 c++ 的特性,这一点非常重要,所以,C++调用c接口 和 c调用c++接口不一样。它是一种链接约定,不影响对函数的检查参数的转换仍要遵循c++标准。它其实主要是解决c++调用c函数库的时候出现符号不识别的问题。因为c++出现的晚。它告诉c++编译器以C语言的方式编译和链接函数。

1  c++调用c函数

  c++是向后兼容的,所以肯定有方法去支持。方法就是用 extern "C“ 

  假如引用c中的void fun1() ;在c++里面直接先声明 extern "C" void fun1();告诉编译器去别的文件找函数且用c的方式编译

   多说一句,编程中的声明定义和引用的区别如果你能搞得清楚,其实也好理解,假如模块A想要

  使用模块B中的函数,第一种情况,有模块B的头文件B.h。且头文件中有函数的声明(声明意味着有这么一个东西,不分配空间,不声明直接引用会找不到函数)。第二种情况。没有模块B的头文件,那么在模块里extern void fun1();告诉linker去别的文件找函数。

2 c调用c++函数

这个不太符合常理,但是也能实现,也需要用到extern “C”。

假如需要引用c++中的void f unc1();那么直接在c++中先声明extern "C" void func1(),然后在在定义。

3 python调用c/c++函数接口

推荐使用动态库,也是需要借助extern "C",因为Python只能识别c函数,所以c++中的代码要加extern “C”{你的所有代码}

推荐链接:

                  

 

转载地址:http://ywvqb.baihongyu.com/

你可能感兴趣的文章
我如何运行一些JavaScript代码段
查看>>
地理位置api_如何使用地理位置API
查看>>
数据结构设计 数据字典_Go数据结构:字典
查看>>
node_modules文件夹的大小不是问题。 这是一种特权
查看>>
dom 删除所有子元素_如何从DOM元素中删除所有子级
查看>>
html 打印样式控制_如何使用样式打印HTML
查看>>
gatsby_Next.js vs Gatsby vs create-react-app
查看>>
掌握React.Memo
查看>>
golang 延迟_了解Go中的延迟
查看>>
react 组件样式_如何设置React组件的样式
查看>>
node.js 模块_如何创建Node.js模块
查看>>
centos上安装git_如何在CentOS 8上安装Git
查看>>
在JavaScript中优化switch语句
查看>>
express 模板引擎_了解Express模板引擎
查看>>
如何在CentOS 8上安装Node.js
查看>>
如何在Ubuntu 20.04上安装Git
查看>>
javascript深度图_在JavaScript中深度克隆对象(及其工作方式)
查看>>
centos ssh密钥_如何在CentOS 8上设置SSH密钥
查看>>
debian 10 安装_如何在Debian 10上安装Webmin
查看>>
使用CentOS 8进行初始服务器设置
查看>>