vxWorks6.9应用开发时,C语言调用C++接口的一次记录

涉及环境:workbench3.3  、 vxWorks6.9 、 windows7

事件起因:项目组一直用C语言,最近有个模块修改,想使用标准C++ STL里的hash_map,于是新建了一个.cpp文件和.h文件(我们定义为my_hash.h)对hash_map功能进行封装,可是在其他.c文件中引用my_hash.h时却出现了错误,因为该h文件中包含了 #include <hash_map> 文件,这个标准头文件是无法在C语言文件中识别的。

解决经过

1、在my_hash.h头文件中使用 #ifdef __cplusplus extern"C" 这个,依然不行,发现问题的关键在于my_hash.h头文件中引用了<hash_map>头文件,所以只要.c文件包含 my_hash.h头文件就肯定会出问题(僵硬。。。);

2、上网查阅C/C++互相调用的相关文章,费时不短,无果;

3、请教身边大佬,大佬抛给我一个名词“C语言不完整声明”;

4、查阅不完整声明的相关文章,简单了解原理、学习用法,Amazing! 问题解决了。

附录部分代码

/* my_hash.cpp ,只粘贴部分关键代码 */

#include <hash_map>

using namespace std;
typedef std::hash_map<int32_t, int32_t> HASH_MAP;
typedef struct _nethash_table_s_
{
	HASH_MAP hash_map_node;
}Nethash_table_s;
/* my_hash.h ,只粘贴部分关键代码 */

/* 结构体的不完整声明(避免hash_map头文件出现在C文件中),hash_table结构体的具体实现不向用户暴露 */
typedef struct _nethash_table_s_ Nethash_table_s;

#ifdef __cplusplus
extern "C" {
#endif

/* 声明函数接口 */

#ifdef __cplusplus
}
#endif

简单总结

C语言的不完整声明(这个特性与函数在.h文件中的声明有些相似),就是在定义之前,只对类型进行一个声明,这样就隐藏了这个类型(接口)的实现细节。

参考文章

C语言的不完整类型和前置声明

C语言不完全类型与延迟定义

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值