C与C++混合编程

CC++混合编程的项目中,难免要相互调用对方的函数,如果不做特殊处理,就很容易出现编译出错的问题。

C中调用C++的函数,在C++文件中已实现的函数,通过#include包含的.h文件可以找到,但提示函数未定义(undefined)。这是什么原因呢?

如我们定义了一个函数。如:

int func(int t)

{

//function

return 0;

}

C编译器会将此函数编译成类似_func的符号,C连接器只要找到了调用函数的符号,就认为链接成功。而C++编译器为了实现函数的重载,会再编译时带上函数的信息,将上面的函数编译成类似_func_int这样的符号。所以在C函数中调用C++中调用的函数时,编译器提示函数未定义。

我们只需要在C++文件和.h文件中,加入extern “c” {},告诉编译器此C++文件依照C的方式来编译封装接口,函数实现还是依照C++语法和C++方式来编译。如:

l func.c文件

#ifdef __cplusplus

extern “C” {

#endif

 

int func(int t)

{

//function

return 0;

}

 

#ifdef __cplusplus

}

#endif

l func.h文件

#ifdef __cplusplus

extern “C” {

#endif

 

#ifndef __FUNC_H__

#define __FUNC_H__

int func(int t);

#endif

 

#ifdef __cplusplus

}

#endif

其中__cplusplusC++编译器的保留宏定义。extern “C” {}是高手C++编译器{}里面的函数按照C的编译格式来编译和链接。

这样,就可以在C函数中调用C++函数,也可以在C++函数中调用C的函数。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值