1 C++调用C中的函数
1.1 C++调用C中的函数(正确使用)
1、案例源文件组成
图1
2、math模块包含文件
1)源文件math.c
图2
2)头文件math.h
图3
3、主模块包含文件
1)源文件main.cpp
图4
2)头文件module.h
图5
4、编译math模块
图6
5、编译主模块
图7
6、链接
图8a
图8b
1.2 C++调用C中的函数(非正确使用)
1、案例源文件组成
图9
2、math模块包含文件
1)源文件math.c
图10
2)头文件math.h
图11
3、主模块包含文件
1)源文件main.cpp
图12
2)头文件module.h
图13
图13与图5内容差异为:图13屏蔽了exterrn “C” {}
4、编译math模块
图14
5、编译主模块
图15
图15与图7中内容差异:图7中的函数符号为add_func,而图15中的函数符号为_Z8add_funcii
因C++为面向对象语言,存在多态性,在编译时会将函数参数类型和个数一并加入符号中,其中_Z8add_funcii中的ii为表示有两个参数,并且参数类型为integer型。
6、链接
图16
2 C调用C++中的函数
2.1 C调用C++中的函数(正确使用)
1、源码结构
图1
2、math模块
1)math.h文件
图2
2)math.cpp
图3
3)编译math模块
图4
4)查看math.o中符号内容
图5
3、主模块
1)module.h
图6
2)main.c
图7
3)编译主模块
图8
4)查看main.o中符号
图9
4、链接(math.o和main.o)
图10
2.2 C调用C++中的函数(非正确使用)
1、源文件结构
图1
2、math模块
1)math.h文件
图2
2)math.cpp文件
图3
3)编译math模块
图4
4)查看math.o中的符号
图5
3、主模块
1)module.h
图6
2)main.c
图7
3)编译主模块
图8
4)查看main.o中符号
图9
4、链接(math.o和main.o)
图10
3 总结
C++保留了一部分过程式语言特点,因此可以定义不属于任何类的全局变量和函数;但是C++为面向对象语言,支持函数的重载,C++对全局函数处理方式明显与C不同。extern “C”{}目的是为了让C++正确使用C的代码,加上extern “C”{}之后,会指示编译器对这部分代码按照C语言进行编译,而不是C++。C++支持多态,因此编译过程中会将函数的参数类型合入函数名符号中,而不仅仅是函数名。
__cplusplus为cpp中自定义的宏,extern表明变量和函数是全局性的。
主意:
1)C++调用一个C语言编写的.so库时,包含描述.so库中函数的头文件时,应该将对应的头文件放置在extern “C”{}格式的{}中,。
2)C中引用C++中的全局函数时,C++的头文件需要加extern “C”,而C文件中不能用extern “C”,只能使用extern关键字。
---------------------
作者:yanlaifan
来源:CSDN
版权声明:本文为博主原创文章,转载请附上博文链接!
微信关注我们
原文链接:https://yq.aliyun.com/articles/655881
转载内容版权归作者及来源网站所有!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
相关文章
发表评论
资源下载
更多资源优质分享Android(本站安卓app)
近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。
Oracle Database,又名Oracle RDBMS
Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。
Apache Tomcat7、8、9(Java Web服务器)
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Eclipse(集成开发环境)
Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。