这段时间,在做一个实验,用于将来的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); }
|