joe 发表于 2022-2-17 08:55:19

c++调用c,而c再调去c++

这段时间,在做一个实验,用于将来的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
}
#endifc_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);}
页: [1]
查看完整版本: c++调用c,而c再调去c++