c代码和c++代码互相调用

news2024/10/7 0:03:56

note

不管是c代码调用c++代码,还是c++代码调用c代码,本质上都是g++兼容gcc的功能

c++代码调用c代码

lib.h

#ifndef _LIB_H_

void libfun(void);

#endif

lib.c

#include <stdio.h>
#include "lib.h"

void libfun(void) {
	printf("this is in libfun\n");

}

main.hpp

#pragma once

#ifdef __cplusplus	// 若当前是cpp编译器
extern "C" {	// 如下是c规则的数据类型声明,函数声明
	#include "lib.h"	// 数据类型定义和函数声明放在头文件里了
#endif

#ifdef __cplusplus
}
#endif

main.cpp

#include "main.hpp"

int main() {

	libfun();
	return 0;
}

makefile

main.exe:lib.o main.o
	g++ $^ -o $@
lib.o:lib.c
	gcc -c $< -o $@
main.o:main.cpp
	g++ -c $< -o $@

.PHONY:clean
clean:
	rm -f *.o *.exe

c代码调用c++代码

 fun.cpp

#include "fun.hpp"
#include <iostream>
using std::cout;

void Fun::fun(void) {
	cout << "this is in Fun::fun\n";	// 不可用cout
}


void call_me(void) {
	Fun f;
	f.fun();
}

fun.hpp


#pragma once

class Fun {
public:
	void fun(void);

};


#ifdef __cplusplus
extern "C" {
void call_me(void);	// 对外声明c接口
#endif

#ifdef __cplusplus
}
#endif

main.c

extern void call_me(void);


int main(void) {
	call_me();
	return 0;
}

makefile


# 重点:c代码调用c++代码在链接时一定要使用g++编译器,所以本质上还是g++兼容了gcc

main.exe:fun.o main.o
	g++ $^ -o $@

fun.o:fun.cpp
	g++ -std=c++11 -c $< -o $@

main.o:main.c
	gcc -c $< -o $@

.PHONY:clean
clean:
	rm -f *.o *.exe

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

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

相关文章

Intel nuc 清除cmos密码

设备为intel nuc7&#xff0c;其他版本可以参考&#xff0c;步骤如下 1、找到主板上的bios_sec的三针跳线 2、将跳线开关取下 3、按住电源键3秒&#xff0c;电源指示灯变为橙色后松手 4、耐心等待显示器显示bios recovery倒计时画面 5、按esc取消bios recovery 6、显示器显…

Oss文件上传-简化版

这里使用的是element的上传组件&#xff0c;相关上传钩子看官网 一、获取到oss后台相关的签名数据 建议通过接口获取 二、上传 //获取oss相关参数// getOsstokenasync beforeUploadMasterImg(file) {console.log("点击上传");await this.getOssSingnature(file);},…

这7款UI设计工具值得一试!

在设计工作中&#xff0c;UI设计更注重于人和产品互动式时的交互效果&#xff0c;也就是页面内容丰富程度。无论是想打造哪种风格的UI设计界面&#xff0c;这个过程都离不开好用的UI设计工具&#xff0c;本文总结了7款年度好用的UI设计工具&#xff0c;能帮助设计师更轻松地创作…

压裂工艺原理简述

一、压裂程序 1. 压裂概念 在石油领域&#xff0c;压裂是指采油或采气过程中&#xff0c;利用水力作用&#xff0c;使油气层形成裂缝的一种方法&#xff0c;又称水力压裂。压裂是人为地使地层产生裂缝&#xff0c;改善油在地下的流动环境&#xff0c;使油井产量增加&#xff…

【kubernetes系列】kubernetes之计算资源管理

资源类型 在 Kubernetes 中&#xff0c;Node 提供资源&#xff0c;而 Pod 使用资源。其中资源分为计算&#xff08;CPU、Memory、GPU&#xff09;、存储&#xff08;Disk、SSD&#xff09;、网络&#xff08;Network Bandwidth、IP、Ports&#xff09;。这些资源提供了应用运行…

DIN - 序列模型之深度兴趣网络(阿里)

&#x1f525; DIN来自于 阿里 盖坤团队 在 KDD-2018 发的论文《Deep Interest Network for Click-Through Rate Prediction》。该模型在当时已经应用于阿里的电商广告推荐业务&#xff0c;效果不错。 文章目录 1、介绍&#xff1a;2、单值特征 & 多值特征&#xff1a;3、动…

共筑信创生态!亚信科技AntDB数据库与用友、东方通、星辰天合达成兼容互认

近日&#xff0c;亚信科技AntDB数据库与用友U8 cloud、东方通应用服务器TongWeb V7.0、星辰天合全产品体系完成兼容适配。经测试&#xff0c;AntDB数据库与U8 cloud产品&#xff0c;TongWeb V7.0服务器&#xff0c;星辰天合天合翔宇分布式存储系统、统一数据平台XEDP、超融合平…

分析分布式架构-技术

分布式系统的主要目的 提高系统的性能 提高吞吐量&#xff0c;服务更多的客户。提高并发和流量。 通过以下的技术提高处理高并发场景的能力 缓存系统&#xff0c;更快的响应客户端的请求。降低对数据库的压力(提高响应速度) 前端浏览器&#xff0c;网络&#xff0c;后端服务&a…

深入理解Linux网络——TCP连接的开销

文章目录 一、相关实际问题二、Linux内核如何管理内存1&#xff09;node划分2&#xff09;zone划分3&#xff09;基于伙伴系统管理空闲页面4、slab分配器5&#xff09;小结 三、TCP连接相关内核对象1&#xff09;socket函数直接创建1. sock_inode_cache对象申请2. tcp对象申请3…

自建sqlserver迁移到aliyun的rds for sqlserver实战

大家好&#xff0c;在实际中有些客户有上云的需求&#xff0c;需要把线下自建的sqlserver迁移至aliyun的rds for sqlserver。大家第一时间想到的是用dts工具&#xff0c;根据工作经验&#xff0c;DTS迁移mysql类的数据库比较成熟&#xff0c;但是迁移sqlserver之类会有问题。首…

二本逆互联网大厂! 高薪就业

【二本屌丝也能逆袭&#xff01;毕业四年从小公司到大厂之路&#xff0c;这就是我的逆袭&#x1f680;✨】 大家对如何逆袭互联网大厂而感到惊讶&#xff1f;作为计算机专业的大学生&#xff0c;想必你对于进入互联网行业有很多的期望和追求。但是面对激烈的竞争和复杂的招聘要…

wasserstein distance简单记录

W a s s e r s t e i n Wasserstein Wasserstein d i s t a n c e distance distance一般被称为推土距离&#xff0c;假设有两个分布 P ( x ) P(x) P(x)和 Q ( y ) Q(y) Q(y) &#xff0c;两个分布间的推土距离为&#xff1a; W ( P , Q ) inf ⁡ γ ∈ Π ( P , Q ) E ( x ,…

深度学习trick

本次Tricks主要面向于深度学习中计算机视觉方向的研究&#xff0c;分为数据增广方法、训练技巧&#xff0c;参数调节这三个方面进行深入的分析。内容有一部分是基于openmmlab的mmdet和mmseg两个框架上的成熟应用案例进行详细阐述。 首先是数据增广的tricks&#xff1a; 0、Fli…

【Java基础教程】(十八)包及访问权限篇 · 下:Java编程中的权限控制修饰符、单例设计模式 (Singleton)和多例设计模式的综合探析~

Java基础教程之包及访问权限 下 本节学习目标1️⃣ 访问控制权限2️⃣ 命名规范3️⃣ 单例设计模式 (Singleton)4️⃣ 多例设计模式 本节学习目标 掌握Java 中的4种访问权限&#xff1b;掌握Java 语言的命名规范&#xff1b;掌握单例设计模式与多例设计模式的定义结构&#x…

【HISI IC萌新虚拟项目】cpu_if的接口cpu_agent utils搭建

关于整个虚拟项目,请参考: 【HISI IC萌新虚拟项目】Package Process Unit项目全流程目录_尼德兰的喵的博客-CSDN博客 前言 spt_agent utils已经完成了(虽然之后可能还会有微调),接下来完成配置通路cpu interface对应的utils。这个通路比较特殊,一是带反馈的接口,二是时…

Android 通过插桩来代理线程池

前言 在日常开发App的过程中&#xff0c;难免需要依赖第三方Sdk&#xff0c;这样就无形中增加了我们自己App的线程数&#xff0c;从而会导致App出现内存溢出、Cpu消耗增加等等负面影响。如果依赖的Sdk提供了线程池代理的接口还好&#xff0c;那样直接设置我们自定义的线程池。但…

密码学学习笔记(十五):ECDSA - 椭圆曲线数字签名算法

椭圆曲线数字签名算法是DSA的一种椭圆曲线变体&#xff0c;它发明的初衷只是避免使用Schnorr签名的专利。椭圆曲线数字签名算法依赖于验证器中的私钥和主机用于验证验证器的公钥。它的缺点和DSA一样&#xff0c;它也没有提供安全性证明。 椭圆曲线算法 DSS&#xff08;数字签…

工作空间内各文件夹解析

src文件夹用来存放源代码 launch文件夹用来存放一个或多个ros节点启动文件 msg文件夹包含用户定制化消息的定义 srv文件夹包含各种服务的定义 action文件夹包含动作文件 package.xml是软件包清单文件 Cmakelists.txt文件包含编译软件包的各类指令

面试官: 说一下你做过哪些性能优化?

前言 如果你已经有 2 - 3 年以上开发经验还不懂的怎么去优化自己的项目&#xff0c;那就有点说不过去了&#xff0c;下面是我自己总结的一套通用级别的 Android 性能优化。 如果你正在找工作, 那么你需要一份 Android 高级开发面试宝典 1、 你对 APP 的启动有过研究吗? 有做过…

Spring解决数据乱码问题-spring21

乱码数据实际情况&#xff1a; 都出现了&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f;&#xff1f; 怎么解决&#xff1a; 第一步&#xff0c;找到web.xml配置文件。 改成name控制台就不出来了 如何解决地址方法与Controller业务参数名称不一致的情况&#xf…