C与C++的函数相互调用

无法直接调用原因:

C 和 C++ 的函数可以相互调用,但需要一些特殊的注意事项,因为它们有不同的编译和链接规则以及一些语法差异。

链接规则

  • C 语言的链接器通常使用 C 标准的函数命名和调用约定,而 C++ 链接器使用 C++ 的函数命名和调用约定。这意味着 C++ 可以支持函数重载和运算符重载,而 C 不能。
  • 如果你要在 C++ 中调用 C 函数,需要使用 extern "C" 块将 C 函数声明包裹起来,以告诉 C++ 编译器使用 C 的链接规则。
在C++中使用C语言函数
//在C的.h文件中使用extern "C"包裹一下这个函数
extern "C" {void c_function(); // 这是一个C函数的声明
}
另一种写法:
extern “C” void c_function();//在.cpp的文件中调用上面.h文件后可以直接使用
int main() {c_function(); // 在C++中调用C函数return 0;
}还有一种简单直接的就是将调用的库文件直接包含:
extern "C" {
#include "test1.h"
#include "test2.h"
}
//在C中调用C++函数
//在C++的.h文件中
#ifdef __cplusplus
extern "C"{
#endifvoid Jx_ChengyuJump(void);#ifdef __cplusplus
}
#endif//在C的.c文件中
int main()
{Jx_ChengyuJump();return 0;
}

中间使用的:__cplusplus

__cplusplus 是一个预定义的宏,在 C++ 编译器中使用,用于指示当前编译环境是否为 C++。这个宏的主要目的是允许代码根据编译器是否支持 C++ 标准来进行条件编译,以便在不同的编译环境中编写可移植的代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/80228.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue cli 打包、生产环境http-proxy-middleware代理

结构树 版本 1、创建vue.config.js const path require(path); const UglifyJsPlugin require(uglifyjs-webpack-plugin) //压缩 const CompressionWebpackPlugin require(compression-webpack-plugin) const isProduction process.env.NODE_ENV ! development;module.exp…

制作ubuntu18.04系统盘

文章目录 前言一、下载ubuntu18.04的iso文件二、制作u盘系统盘2、使用ultra来制作系统盘2.1、加载iso2.2、制作系统盘 前言 安装ubuntu18.04系统 一、下载ubuntu18.04的iso文件 打开下面的网址,找到自己需要的iso文件 https://releases.ubuntu.com/二、制作u盘系…

Mapbox加载arcgis的底图

成果图 这种底图基本上都是按照raster来加载的,主要就是知道地址了,拼参数 具体参数请参考官网 https://developers.arcgis.com/rest/services-reference/enterprise/export-map.htm 源码 我的服务列表是这样的 http://XXXX:XXXX/arcgis/rest/services/…

程序员在线周刊(投稿篇)

嗨,大家好!作为一名程序员,并且是一名互联网文章作者,我非常激动地向大家宣布,我们计划推出一份在线周刊,专门为程序员们提供有趣、实用的文章和资讯。而现在,我们正在征集投稿! 是…

pt25django教程

查询数据 通过 MyModel.objects 管理器方法调用查询接口,查询数据库 方法说明all()查询全部记录,返回QuerySet查询对象get()查询符合条件的单一记录filter()查询符合条件的多条记录exclude()查询符合条件之外的全部记录 all()方法 MyModel.objects.all() 查询M…

MyBatis获取参数值的两种方式#{}和${} 以及 获取参数值的各种情况

一、参数值的两种方式#{}和${} 在 MyBatis 中,可以使用两种方式来获取参数值:#{} 和 ${}。 1. #{}:这是 MyBatis 推荐使用的方式。在 SQL 语句中使用 #{},MyBatis 会自动将参数值进行预编译处理,防止 SQL 注入攻击&a…

【深度学习】- NLP系列文章之 1.文本表示以及mlp来处理分类问题

系列文章目录 1. 文本分类与词嵌入表示,mlp来处理分类问题 2. RNN、LSTM、GRU三种方式处理文本分类问题 3. 评论情绪分类 还是得开个坑,最近搞论文,使用lstm做的ssd的cache prefetching,意味着我不能再划水了。 文章目录 系列文章…

Java 线性表

以下是一个简单的 Java 线性表&#xff08;ArrayList&#xff09;的实现示例&#xff1a; import java.util.Arrays;public class MyArrayList<E> {private static final int DEFAULT_CAPACITY 10;private int size 0;private Object elements[];public MyArrayList()…

打造“共富果园” 广东乳源推动茶油全产业链高质量发展

新华网广州9月13日电&#xff08;李庆招&#xff09;金秋九月&#xff0c;瓜果飘香&#xff0c;油茶也将迎来采摘期。13日&#xff0c;一场以“中国健康油 茶油新势力”为主题的乳源茶油12221市场体系之产业大会暨供销对接会在广州举行。来自茶油行业的专家、企业家齐聚一堂&am…

三、修改安卓aosp代码更改硬件参数

系列文章目录 第一章 安卓aosp源码编译环境搭建 第二章 手机硬件参数介绍和校验算法 第三章 修改安卓aosp代码更改硬件参数 第四章 编译定制rom并刷机实现硬改(一) 第五章 编译定制rom并刷机实现硬改(二) 第六章 不root不magisk不xposed lsposed frida原生修改定位 第七章 安卓…

Java 中“1000==1000”为false,而”100==100“为true?

如果你运行下面的代码: Integer a 1000, b 1000; System.out.println(a b);//1Integer c 100, d 100; System.out.println(c d);//2你会得到: false true基本知识&#xff1a;我们知道&#xff0c;如果两个引用指向同一个对象&#xff0c;用表示它们是相等的。如果两…

【JavaSE笔记】类和对象(万字详解)

一、前言 Java是一种广泛应用于各个领域的编程语言&#xff0c;它的面向对象编程范式使得它成为了当今软件开发的主要选择之一。通过面向对象编程&#xff0c;Java使程序员能够将代码组织成易于理解和维护的结构&#xff0c;并且在开发大型复杂的应用程序时提供了许多便利。 …

FDM3D打印系列——Blue Mary

大家好&#xff0c;我是阿赵。   这次打印一个拳皇里面的Blue Mary。   打印这个模型的原因&#xff0c;是看到有网友说这个模型用FDM打印不出来&#xff0c;有些人评论说要光固化才行。所以我也想试试。结果是成功的。 一、打印过程 这个模型是分为了5个部分&#xff0c…

uniapp轮播图制作

在Uniapp中实现轮播图可以使用swiper组件&#xff0c;它是一个常用的轮播组件。以下是一个简单的示例&#xff1a; 在你的组件模板文件中&#xff0c;添加swiper组件&#xff0c;并设置相应的属性和事件处理方法&#xff1a; <template><view><swiper autopla…

守护线程?

守护线程&#xff08;Daemon Thread&#xff09;是一种特殊类型的线程。它与普通线程&#xff08;用户线程&#xff09;的区别&#xff1a; 生命周期&#xff1a; 守护线程的生命周期依赖于其他线程&#xff0c;当所有的用户线程都结束时&#xff0c;守护线程会随之自动终止。…

关于老项目从JDK8升级到JDK17所需要注意的细节

文章目录 ☀️1.关于老项目从JDK8升级到JDK17所需要注意的细节&#x1f338;1.1.更新JDK&#x1f338;1.2.修改Idea中的JDK版本&#x1f338;1.3.关于修改过程中遇到的异常&#x1f338;1.4.IDEA工具栏操作Maven正常&#xff0c;但使用mvn命令运行就报错 ☀️1.关于老项目从JDK…

基于SpringbootShiro实现的CAS单点登录

概述 单点登录&#xff08;Single Sign On,SSO&#xff09;是一种登录管理机制&#xff0c;主要用于多系统集成&#xff0c;即在多个系统中&#xff0c;用户只需要到一个中央服务器登录一次即可访问这些系统中的任何一个&#xff0c;无须多次登录。常见的例子就是&#xff0c;…

MCU软核 3. Xilinx Artix7上运行cortex-m3软核

0. 环境 - win10 vivado 2018.3 keil mdk - jlink - XC7A35TV12 1. 下载资料 https://keilpack.azureedge.net/pack/Keil.V2M-MPS2_DSx_BSP.1.1.0.pack https://gitee.com/whik/cortex_m3_on_xc7a100t 2. vivado 2018 Create Project -> Next -> -> Project n…

dp(3) - 背包问题(上)

目录 简论 关于dp问题 : ​编辑 0-1背包问题 定义 : 例题 : 题面 : ​编辑 思路 : 代码(二维) : 代码(一维优化版): 完全背包问题 题目链接 : 题面 : ​编辑 思路 : 代码(朴素) : 代码(优化) : 代码(一维优化) : 多重背包问题 题目链接 : 题面 : ​编辑 …

软件测试常用的功能测试方法

功能测试 功能测试就是对产品的各功能进行验证&#xff0c;根据功能测试用例&#xff0c;逐项测试&#xff0c;检查产品是否达到用户要求的功能。针对Web系统的常用测试方法如下&#xff1a; 1. 页面链接检查&#xff1a;每一个链接是否都有对应的页面&#xff0c;并且页面之…