c++中调用c接口的问题

最近项目中要用一个获取文件的摘要算法接口,我用标准C写出来之后,自己测试没问题题后交给了同事,结果他把我的文件包含到他的工程后发现无法编译,我过去一看才发现人家的是cpp工程,晕,按照以往的经验,在头文件的方法声明中加了一句extern "C"

#ifndef XXX
#define XXX
#include <stdio.h>
...

extern "C" void mymethod();
...
#endif

还是不行,没道理啊,查了一下资料明白了,我的改动确实是不对的,c++中引用c的方法和c中引用c++中的方法是不一样的

先说第一种情况,c++中引用c中的方法

假设c的程序包含文件a.h/a.c, c++文件是b.cpp,那么b.cpp中在包含a.h时应该这么写:

extern "C"
{
#include "a.h"
}

第二种情况c中引用c++中的方法

假设c++文件有b.h b.cpp,c文件是a.c

b.h中声明的方法前要加上extern "C"修饰符,同时在a.c中使用该方法时这样用:extern 方法名

/* b.h中的写法 */
...
extern "C" void foo();

...
/*****************************************/
/* a.c中的写法 */
extern void foo();  /* 不能使用include "b.h" */

...

在c文件的头文件中是不能直接写extern "C",这样做gcc编译器是不允许的.当然,对于第一种情况,我们更多的是使用如下的方式

#ifndef MY_H
#define MY_H
...

#ifdef __cplusplus
extern "C" {
#endif

method list

#ifdef __cplusplus
}
#endif

#endif

刚才不是说c的头文件里不能用extern "C"吗?这时你如果用g++编译器进行编译就没有问题了^_^

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值