extern "c"解析,C++中引入C++全局函数

1. 经常看到说明在c++中引用c的库函数要添加 exter "c"。一直没有深究过这个问题,现在理论上分下下。

C++为了标示多态,编译之后的obj文件是和C编译的文件不同的。同样的 int add(int x,int y)如果用C编译就会编译成_add,但如果是C++编译就是_add_int_int,C++编译的obj会带参数。

在C++代码中常见的应用是

#ifndef _DISTURBAPI_H
#define _DISTURBAPI_H
#include "wavestruct.h"
#ifdef _MSC_VER
#ifdef CONTROLORDER_EXPORT
#define DLLCONTROLAPI_EXPORT __declspec(dllexport)
#else
#define DLLCONTROLAPI_EXPORT __declspec(dllimport)
#endif
#else
#define DLLCONTROLAPI_EXPORT
#endif

#ifdef __cplusplus
extern "C"
{
#endif

void DLLCONTROLAPI_EXPORT confirmWavDataSend(TWavSendOver cmd);        //发送录波数据接收状态命令
void DLLCONTROLAPI_EXPORT AskForWaveDataSend(TCallWaveCmd SendOrder);  //启动录波命令,命令由SendOrder.CMD决定
#ifdef __cplusplus
}
#endif

#endif

#ifdef _cplusplus的应用。{}中先添加#endif,后添加 #ifdef,上次就被这个搞蒙了。。。

上面代码中表示添加动态库dllcontrolapi_exprot中的C函数。


2.C++中引入全局函数的问题。

假设a.h中有一个全局函数,bool exchange(int &x,int &y);b.h定义了一个C++的类,该类中用到了a.h中的函数,包含了a.h的头文件,main.cpp中也用到了a.h中的函数,也包含了a.h这个头文件,此时编译会报错,报错内容为exchange这个函数在2个obj中定义。不知道为什么a.h前面的宏为什么没起作用。

解决方法:将a.h中的函数改为:static bool exchange(int &x,int &y).编译通过。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值