C++ -- extern “C“ 用法

C++ -- extern “C“ 用法,第1张

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);

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5635869.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存