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

c++中extern “C“的作用及理解

1. 目的

extern "C" 是 C++ 特有的指令,用于支持 C++ 与 C 语言的混合编程。

2. 功能

extern "C" 指令的作用是指示 C++ 编译器使用 C 语言的编译规则来编译特定的代码块。这主要影响函数名的修饰(name mangling),但不会影响 C++ 的其他特性,如类和模板。

3. 原因

C 和 C++ 在编译期间生成函数符号的规则不同。C++ 支持函数重载,因此在编译时会将函数的参数类型信息加入到函数名中,形成独特的符号。例如,C++ 中的函数 Function(int, int) 可能会被编译成 _Z8Functionii

4. 示例

假设有一个 C 函数 Function 如下:

// MyFunction.c
void Function(int a, int b) {
    printf("Hello!!! a = %d, b = %d\n", a, b);
}

在 C++ 中调用该函数:

// main.cpp
extern "C" void Function(int a, int b); // 告诉编译器使用 C 规则编译 Function

int main() {
    Function(1, 2);
    return 0;
}

如果不使用 extern "C",C++ 编译器会期望 Function 的符号为 _Z8Functionii,而不是 C 编译器生成的 Function,导致链接错误。

5. 解决方案

使用 extern "C" 可以确保 C++ 编译器在编译该函数时不进行名称修饰,从而使得 C++ 代码能够正确链接到 C 代码中定义的函数。


http://www.kler.cn/news/302622.html

相关文章:

  • 【FFMPEG】FFplay音视频同步分析(下)
  • 仕考网:2525年国考时间是什么时候?
  • Maven基本使用(下)
  • 无头服务(Headless Service)
  • 按图搜索的实时性:阿里巴巴拍立淘API返回值的快速响应
  • 学懂C++(五十六): 深入理解MFC框架、底层原理及消息映射机制
  • openstack之glance介绍
  • 智能体-AI-Agent-简介
  • MATLAB求解0-1线性规划问题的详细分析
  • k8s笔记——kubebuilder实战
  • 基于深度学习的线性预测:创新应用与挑战
  • 华纳云:修复WordPress内存耗尽错误的常用方法有哪些?
  • Linux操作系统入门(二)
  • Android 车联网——CarProperty使用实例(二十三)
  • 结构开发笔记(八):solidworks软件(七):装配图中让摄像头绕轴旋转起来
  • 学习react一,环境搭建,基础语法
  • STM32启用FPU浮点运算
  • TI DSP下载器XDS100 V2.0无法使用问题
  • GO学习笔记(4) strconv/time
  • LeetCode:2398. 预算内的最多机器人数目 双指针+单调队列,时间复杂度O(n)
  • 航空维修培训中的虚拟现实辅助工程技术应用
  • pdf在线免费转换成word,这些简单方法已为你罗列好
  • redis高级教程
  • 市政智慧公厕:城市管理的新革命
  • Spring Framework 学习总结博客
  • InternVL2-关于 `argparse` 是否会将连字符(-)视为下划线(_)的问题
  • 【阿一网络安全】如何让你的密码更安全?(三) - 散列函数
  • oracle select字段有子查询的缺点与优化
  • VSTO常见的异常
  • 计算机网络(五) —— 自定义协议简单网络程序