risc-v中文社区

 找回密码
 立即注册
查看: 1116|回复: 0

[原创] c++调用c,而c再调去c++

[复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2022-2-17 08:55:19 | 显示全部楼层 |阅读模式
这段时间,在做一个实验,用于将来的risc-v项目,而且用到了第三方的开源库,也用到以前的C代码和C++代码,我又不想再修改相关代码,所以,搞到最后,就成了c和c++互相之间反复调用,我也很久没有在C++下做项目了,所以在此写个记录以供初级学习者学习,记录如下:
1)c++中的类及其相关函数的实现代码:
C.h文件中:
class C {
public:
    void disp(int a);
};
extern C cinst;
C.cpp文件中:
#include "mbed.h"
#include "C.h"
C cinst;
void C::disp(int a)
{
    asm(" nop ");
    printf("%d\n",a);
}
2)需要对cpp中的成员函数做一个wrapper:
midcplus.h文件中:
#include "C.h"
extern "C" void disp_c(int a);
midcplus.cpp文件中:
#include "midcplus.h"
void disp_c(int a)
{
    cinst.disp(a);
}
3)C调用C++中的成员函数:
c_caller.h文件中:
//#include "midcplus.h" //一定不要include这个中间wrapper中的头文件
#ifdef __cplusplus  
extern "C" {  
#endif  
extern void callcplusfun(int arg);
#ifdef __cplusplus  
}
#endif  
c_caller.c文件中:
#include "c_caller.h"
extern void disp_c(int a); //如果后面最终c++主文件用的是c99进行编译则此处要用到extern
void callcplusfun(int arg)
{
    disp_c(arg);
}

4)实际最终主C++代码调用c中的函数:
test.cpp文件中:
#include "C.h"
#include "c_caller.h"
int main(...)
{
callcplusfun(5);
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-5-3 18:20 , Processed in 0.016724 second(s), 17 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表