C++ -- extern “C“ 用法

目录

一、extern "C"是什么?

二、用法展示

1.创建静态库

2.在c++文件中调c的静态库代码

 3.在C文件中调c++的静态库代码

总结


一、extern "C"是什么?

        extern "C"是为了在c++中兼容c代码,表示extern "C"代码中是标准的c 语言代码,要用c的编译器来编译,而不是用c++的编译器来编译

二、用法展示

1.创建静态库

        创建一个空项目,我这里命名为DS,然后在属性>>常规中把配置类型改成静态库类型。于是就有了一个名为DS的静态库。

2.在c++文件中调c的静态库代码

1.添加库目录,目录的路径是静态库中的Debug文件。        

 

 2.在附加依赖项中加入静态库名.lib,我这里就是DS.lib。注意用分号和原来的隔开。

 3.包头文件,找到静态库中要用的头文件,用extern "C"{}包起来。告诉编译器,头文件中的代码是代码,要有c编译器。

 3.在C文件中调c++的静态库代码

        1.vs的编译器配置同之前c++调c。

        2.在c++库中头文件中的函数申明用extern "C"包一下

extern "C"
{
	void StackInit(ST* ps);
	void StackDestroy(ST* ps);
	void StackPush(ST* ps, STDataType x);
	void StackPop(ST* ps);
	STDataType StackTop(ST* ps);
	int StackSize(ST* ps);
	bool StackEmpty(ST* ps);
}

        3.但是这时还不能完成,头文件会在c项目中展开,但是extern不是c的语法,不能编译通过。于是我们要用条件编译简单处理一下,在c++中就有extern "C"。

#ifdef __cplusplus
extern "C"
{
#endif
	void StackInit(ST* ps);
	void StackDestroy(ST* ps);
	void StackPush(ST* ps, STDataType x);
	void StackPop(ST* ps);
	STDataType StackTop(ST* ps);
	int StackSize(ST* ps);
	bool StackEmpty(ST* ps);
#ifdef __cplusplus
}
#endif

        也可以这么用,起到的效果是一样的,这样就完成了,这时运行c的项目就可以运行了。

#ifdef __cplusplus
	#define EXTEREN_C extern "C"
#else
	#define EXTEREN_C
#endif
EXTEREN_C void StackInit(ST* ps);
EXTEREN_C void StackDestroy(ST* ps);
EXTEREN_C void StackPush(ST* ps, STDataType x);
EXTEREN_C void StackPop(ST* ps);
EXTEREN_C STDataType StackTop(ST* ps);
EXTEREN_C int StackSize(ST* ps);
EXTEREN_C bool StackEmpty(ST* ps);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值