extern“C“的应用

extern“C“的应用,第1张

extern"C"

有时候在C++工程中可能需要将某些函数按照C的风格来编译,在函数前加extern “C”,意思是告诉编译器,将该函数按照C语言规则来编译。
今天我们就用力扣的一道例题来介绍一下extern"C”在vs中的应用

在写这道题的时候我们用到了一个数据结构栈,倘若我们需要调用的栈是用一个c语言写的库,但是我们的题目是用C++来写的,那么我们如何来调用C的数据结构呢?

C++调C

首先我们创建一个空项目,将我们的源代码以及头文件先导进去,我是创建了一个DSC的一个工程

先将这两个文件导入,其次配置DSC文件的属性

将配置类型中的原始的应用程序改为静态库
之后生成解决方案

这时就会生成一个DSC.lib的一个文件,跟随着路径我们可以找到这个文件以确定生成,但是这里只是生成解决方案,并不是运行程序,因为这里没有main主函数,不是一个程序。
之后再转到我们今天的工程中2022_6_14中,在文件中包含上我们的头文件
这个头文件是我们DSC中的头文件,以这样的格式表示我们的这个头文件是用C语言的编译器运行的。
之后再进入我们这个工程中的属性页面中

在附加库目录上进行修改选中我们之间DSC中的Debug文件夹,因为我们生成的DSC.lib文件就存储在这个文件夹下面。点击应用确定

之后呢在我们的附加依赖项中添加我们的静态库DSC.lib;这里是以分号分隔,之后应用确定。

此事运行结果就会显示字符是否有效。

C调C++

上面我们讲了C++调用C,那么C可不可以调用C++呢?
当然是可以的,C调用C++如何实现呢
首先我们创建一个C++的空项目,将头文件以及源码加载进去,和上面的一样将其配置类型改为一个静态库。

但是这里需要将这里的头文件做一些处理,因为C的编译器不认识这个extern"C"这个标识,因此在C调C++的时候呢,extern"C"标识是添加在C++工程的头文件中的,因此我们用一个条件编译,要是这些函数是Cplusplus的函数,那么就加extern"C";

之后呢生成解决方案就会生成一个DSC++.lib的文件

在C的工程里面,我们先包含以下头文件,和C++调C同理

最后呢我们还是要对C文件进行属性配置,在附加库目录里面加上我们生成的lib文件,之后再附加依赖项里面加上生成的DSC.lib应用确定

之后我们的程序就可以正常运行了

总结一下:
无论是C工程想调用C++的库还是C++工程想调用C的库,都只需要在C++程序中加入extern"C"。
相关的源代码放在这里了,注意调用工程里面要加入被调用工程的头文件
https://gitee.com/liarbt/c-study-code/tree/master/2022_6_14

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

原文地址: http://outofmemory.cn/langs/1498810.html

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

发表评论

登录后才能评论

评论列表(0条)

保存