前言
C和C++是两种不同的编程语言,它们之间可以通过一些方式进行交互和调用。下面是一些关于C和C++之间相互调用的常见方法和注意事项。
一、C++调用C
1.1创建项目
首先我们要有2个项目,一个项目以C++程序编译,要调用的项目是以C程序编译的。我们将以vs2019进行演示。
C++项目如下:
C语言项目如下:(注意:C语言需要添加头文件.h,头文件主要提供给主程序包含)
C语言头文件如下:
因为是C++调用C,而程序只有一个main函数,所以C项目里没有main函数。
1.2生成静态库
我们需要把C项目生成为静态库,具体操作如下:
右键点击我们的项目。
点击后如下图,选择属性:
打开属性后,选择常规,并将配置类型选择为静态库,如下图:
点击应用,再点击确定。确定后开始编译如下图:
根据路径打开我们的文件,打开后如下图:(.lib就是这个项目的静态库)
至此我们我静态库就已经生成完毕了。
1.3包含头文件
生成完静态库后,我们需要把生成的.lib文件和C程序的.h文件复制到我们的C++项目里。如下图:
1.4添加依赖库
将静态库以及C头文件添加到C++目录后,我们需要打开我们的C++项目,并打开C++项目的项目属性。如下图:
打开属性后,选择“链接器->输入”在附加依赖库一栏中,把我们生成的C成语的.lib静态库添加进去。
1.5 程序
至此我们的环境搭建完成,然后我们需要使用”extern关键字”来修饰这个C的头文件。
如下图:
并将程序更改如下:
更改完成后,点击编译。这样我们就能使用C++程序调用C程序的内容了。
二、C调用C++
2.1更改程序目录
我们要把调用的程序,改成C++程序.cpp。
然后把主程序改成C程序,如下图:
2.2更改代码
但是此时出问题了,C语言里并没有”extern C”这个用法, 这种用法放C程序里会出错,所以我们把他删掉。
然后,将我们的输出打印从”C”改成”C++”.
因为CPP程序和C语言程序得函数名的修饰不同,所以我们要用extern来修饰C++程序里需要调用的函数。
但是此时又来问题了,.h的头文件会在预处理进行展开,但是C语言不认识extern ”C”,所以我们可以这样操作:
__cplusplus是一个宏定义,只要在以C++程序编译时,才会有。如果不是以C++程序编译,那么就不会展开extern ”c”。
然后我们就可以编译了,生成的是C++程序的静态库。
2.3生成添加依赖库
再把C++的静态库和.h文件,移动到C程序目录。
在我们的.c主程序中,也需要添加依赖库。如下图
添加完成之后,选择确认。
这样我们就可以成功用C程序调用C++程序里的函数。
2.4编译