C调用C++和C++调用C

1. C++中调用C的函数

1.1 在.cpp中extern "C"

告知编译器:这几个函数此处使用C方式编译。
这就和.c中编译生成的函数名相同了。

//类型1
extern "C" void foo(int x, int y);
//类型2
extern "C"{
    int foo(int x, int y);
    void bar();
}
//方法3
extern "C" {
    #include “myheader.h”
}

1.2 在.c中extern "C"

  直接加是不行的,C中并不支持extern "C",所以要加上ifdef __cplusplus

#ifdef __cplusplus 
extern "C" { 
#endif 
  
void DeleteStack(Stack stack); 
void PrintStack(Stack stack); 
void Pop(Stack stack); 
  
#ifdef __cplusplus 
} 
#endif

2. C中调用C++的函数

2.1 普通非成员函数

2.1.1 在C++的.h中extern "C"
// 也可添加ifdef __cplusplus
extern "C" void PrintCpp(void);
extern "C"{
    int foo(int x, int y);
    void bar();
}

此时.c中可直接使用。
但直接报告该头文件可能会由于其他一些文件问题导致出错,所以建议在需要的.c文件中只extetn 需要的函数。

2.3 C++特有的全局变量

类似于vector的全局变量定义在.cpp中。
需要把对这些变量的操作或读取封装为函数。

#include "C++.h"
map<int, string> g_keyvalue;

void C_g_keyvalueInsert()
{
    g_keyvalue.insert(pair(1, "srdfg"));
}
#ifndef _C++.H_
#define _C++.H_
extern "C" void C_g_keyvalueInsert();
#endif
extern void C_g_keyvalueInsert();

#就可以使用了,无需引入全局变量。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值