当前位置: 首页 > news >正文

C++ extern “C“ 用法

extern “C”

由于c++中需要支持函数重载,所以c和c++中对同一个函数经过编译后生成的函数名不相同

extern “C”主要作用就是为了实现c++代码能够调用其他 c 语言代码

1(不常用)
//告诉编译器 show() 函数按c语言的方式进行编译和链接
extern "C" void show();
2(常用)
// C头文件中使用
#if __cplusplusextern "C"{
#endif
//放 C头文件声明
//void func1();
//...#if __cplusplus}
#endif

其他

在Linux下测试:
c函数:	 	void MyFunc(){} ,被编译成函数: MyFunc
c++函数: 	void MyFunc(){},被编译成函数: _Z6Myfuncv

由于c++中需要支持函数重载,所以 c 和 c++ 中对同一个函数经过编译后生成的函数名是不相同的。

这就导致了一个问题,如果在 c++ 中调用一个使用 c 语言编写模块中的某个函数,
那么 c++ 是根据 c++ 的名称修饰方式来查找并链接这个函数,那么就会发生链接错误。

以上例,c++ 中调用 MyFunc 函数,在链接阶段会去找 _Z6Myfuncv,结果是没有找到的,
因为这个 MyFunc 函数是c语言编写的,生成的符号是 MyFunc。

所以

extern "C"的主要作用就是为了实现 c++ 代码能够调用其他 c 语言代码。

加上extern "C"后,这部分代码编译器按c语言的方式进行编译和链接,而不是按c++的方式。

http://www.lryc.cn/news/257995.html

相关文章:

  • HTML面试题---专题四
  • stm32项目(11)——基于stm32的俄罗斯方块游戏机
  • 【计算机网络基础2】IP地址和子网掩码
  • ES6-import后是否有{}的区别
  • rv1126-rv1109-以太网功能-eth-(原理篇)
  • 【IDEA】反向撤销操作快捷键 ctrl+shift+z 和搜狗热键冲突的解决办法
  • 数据结构之----逻辑结构、物理结构
  • pip 通过git安装库
  • C语言——从终端输入 3 个数 a、b、c,按从大到小的顺序输出。
  • 【JVM从入门到实战】(二)字节码文件的组成
  • OPC UA常见故障信息代码
  • 第20关 快速掌握K8S下的有状态服务StatefulSet
  • ​如何使用https://www.krea.ai/来实现文生图,图生图,
  • 点滴生活记录2
  • 【带头学C++】----- 九、类和对象 ---- 9.12 C++之友元函数(9.12.1---12.4)
  • 设计模式的定义
  • 【Kubernetes】存储类StorageClass
  • 【LLM】大模型之RLHF和替代方法(DPO、RAILF、ReST等)
  • Spring Boot监听redis过期的key
  • day01、什么是数据库系统?
  • 2023年医疗器械行业分析(京东医疗器械运营数据分析):10月销额增长53%
  • MISRA C++ 2008 标准解析
  • Linux16 ftp文件服务区、vsftpd文件系统服务安装、lftp客户端安装、NFS远程共享存储
  • [排序篇] 冒泡排序
  • CGAL的四面体网格重构
  • 排序-选择排序与堆排序
  • d2l绘图不显示的问题
  • 智能优化算法应用:基于人工蜂群算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • 云原生的 CI/CD 框架tekton - Trigger(二)
  • maven环境搭建