C程序和C++程序之间的互相调用图文教程

 更新时间:2023年07月21日 16:03:03   作者:林 子  
这篇文章主要给大家介绍了关于C程序和C++程序之间互相调用的相关资料,我们平常在刷题的时候,难免遇到实现多组输入这样的问题,文中通过图文介绍的非常详细,需要的朋友可以参考下

前言

我们都知道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” 带来的错误。

到此这篇关于C程序和C++程序之间的互相调用的文章就介绍到这了,更多相关C程序和C++互相调用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C/C++中的 Qt StandardItemModel 数据模型应用解析

    C/C++中的 Qt StandardItemModel 数据模型应用解析

    QStandardItemModel 是标准的以项数据为单位的基于M/V模型的一种标准数据管理方式,本文给大家介绍C/C++中的 Qt StandardItemModel 数据模型应用解析,感兴趣的朋友跟随小编一起看看吧
    2021-12-12
  • 基于C语言实现三子棋游戏的示例代码

    基于C语言实现三子棋游戏的示例代码

    这篇文章主要为大家详细介绍了如何利用C语言数组实现简单的三子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • OpenCV图像轮廓提取的实现

    OpenCV图像轮廓提取的实现

    本文主要介绍了OpenCV图像轮廓提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • C语言内存操作函数使用示例梳理讲解

    C语言内存操作函数使用示例梳理讲解

    这篇文章主要介绍了C语言库函数中的内存操作函数memcpy()、memmove()、memset()、memcmp()使用示例分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-09-09
  • C/C++ Qt 数据库与TreeView组件绑定详解

    C/C++ Qt 数据库与TreeView组件绑定详解

    本篇文章主要介绍了QT数据库与View组件的绑定,通过数据库与组件关联可实现动态展示数据库中的表记录。感兴趣的小伙伴可以了解一下
    2021-12-12
  • 浅析C++中cout的运行机制

    浅析C++中cout的运行机制

    关于C++中cout的使用,相信大家再熟悉不过了,然而对于cout是如何输出的?输出的机制是啥,需要进一步的了解。本章娓娓道来。前几天在网上看到这么一个题目
    2013-10-10
  • C++二进制翻转实例分析

    C++二进制翻转实例分析

    这篇文章主要介绍了C++二进制翻转,通过几个实例分析二进制翻转算法的实现技巧,需要的朋友可以参考下
    2014-09-09
  • 深入浅出分析C++ string底层原理

    深入浅出分析C++ string底层原理

    C ++的string对象实质上就是一个容器,其内部有一个c_str方法能够返回一个指向的实质存储字符串副本的数据成员。即通过string::c_str()配合printf函数可以获取的字符串副本的内存地址
    2021-11-11
  • C语言运算符的重载详解

    C语言运算符的重载详解

    这篇文章主要为大家详细介绍C语言运算符的重载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • C语言中进行大小写字母转化的示例代码

    C语言中进行大小写字母转化的示例代码

    C语言标准库中提供了用于大小写转换的函数,使得这一操作变得简单而高效,本文将详细介绍如何在C语言中进行大小写字母的转换,包括相关的函数和示例代码,需要的朋友可以参考下
    2024-03-03

最新评论