【C++】C程序和C++程序之间的互相调用
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
目录
前言
我们都知道C和C++是两种语言C++兼容C。但是有时候我们用C++写了一个程序想使用C文件里的函数。或者我们用C语言写了一个程序想调用C++程序里的函数。会发现两者不能互相调用其实是可以的这篇文章将会为你揭晓。
一、C++调用C
首先我们先我们要有2个项目一个项目以C++程序编译要调用的项目则是以C程序编译的。
C++项目:
C程序项目:
需要头文件头文件是提供给主程序包含的。
因为是C++调用C而一个程序只有一个main函数所以C项目里是没有main函数的。
生成静态库
然后我们需要把C项目生成静态库。
点击确定然后编译。
这个lib文件就是Print项目的静态库
包含头文件
然后我们把生成的.lib文件和C程序的.h文件移到 C++程序下。
然后包含头文件
添加依赖库
把C程序生成的 .lib静态库添加进去
extern
然后我们需要用extern 来修饰这个头文件。
extern "C" //用C语言的方式编译括号内容
{
#include "Print.h"
}
int main()
{
Print();
return 0;
}
然后我们运行程序
这样就成功的使用 CPP程序调用C程序的内容了
二、C调用C++
C调用和C++ 和C++调用C其实差不多。
我们把要调用的程序 改成C++程序
然后把主程序改成C程序
但此时问题了C 语言里 没有 extern "C"这个用法这种用法放在C程序里会出错所以我们把它删掉。
#define _CRT_SECURE_NO_WARNINGS 1
#include "Print.h"
int main()
{
Print();
return 0;
}
然后 打印的内容改成 is C++
因为CPP程序和C语言程序对函数名的修饰不同所以我们要用extern 来修饰C++程序里需要调用的函数
但此时问题又来了.h的头文件会在预处理的时候展开但是C语言不认识 extern “C”所以我们可以这样。
#pragma once
#ifdef __cplusplus
extern "C"
{
#endif
void Print();
#ifdef __cplusplus
}
#endif
__cplusplus 是一个宏定义只要在以C++程序编译时才会有。如果不是以C++程序编译那么就不会 展开 extern “C”。
然后我们就可以编译了生成的是C++程序的静态库
再把C++的静态库和Print.h 文件 移动到C程序目录
主程序里也别忘了添加依赖库
这样我们就成功用 C程序调用了C++程序里的函数
总结
无论是C++调用C里面的函数还是C调用C++里的函数。本质都是一样的唯一需要注意的是 C语言里面 没有 extern “C” 这种用法。所以C++程序里需要保证在以C++编译时变换成以C的方式编译也就是使用extern “C”。但同时还需要避免当 .h文件在C文件中展开时 extern “C” 带来的错误。