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

C++的链接指示extern “C“

目录

    • 链接指示extern "C"
      • A.What(概念)
      • B.Why(extern "C"的作用)
      • C.How (如何使用链接指示extern "C")

链接指示extern “C”

A.What(概念)

extern"C" 用于在 C++ 代码中声明使用 C 语言编写的函数和全局变量, 在这样的声 明中,编译器会按照 C 语言的命名规则和链接规则进行处理,以保证函数或变量能够 正确地被调用和访问

B.Why(extern "C"的作用)

  • 避免名称修饰问题:

    在 C++ 中,全局变量的名称和函数名称会被 C++ 编译器进行名称修饰。而在 C 语言中,全局变量和函数没有这种修饰。当我们想在 C++ 代码中访问 C 语言编写的全局变量和函数时,需要在全局变量声明和函数前加 上 extern"C",以告诉编译器按照 C 语言的规则进行处理,避免名称修饰问题

  • 跨语言使用和编译:

    有权访问其它语言的编译器,并和当前 C++编译器具有兼容性

C.How (如何使用链接指示extern “C”)

  • 链接指示不能出现在类定义和函数定义的内部

  • 常规使用:
    在这里插入图片描述

    char str01[40] = "wodeshijie";
    cout<<strlen(str01)<<endl; //打印:10
    cout<<add(3,4)<<endl; //打印:7
    char str02[40] = "WODESHIJIE";
    strcat(str01,str02);
    cout<<str01<<endl; //打印:wodeshijieWODESHIJIE
    
  • 链接指示与头文件

    extern "C"
    {
    #include <string.h>
    }
    //使用string.h中的函数
    char zs[20] = "zhangsan"
    char zsCopy[20]= "";
    strcpy(zsCopy, zs);
    cout<<zsCopy<<endl; //打印:zhangsan
    
  • 导出C++函数到其它语言

    // myAdd函数可以被C程序调用
    extern "C" double myAdd(double a, double b){return a+b;}
    

注意:C语言不支持函数的重载
在这里插入图片描述

================================================================================


如果读者对C++感兴趣,欢迎阅读笔者关于在学习C++过程中的关于其知识点的总结系列,入口如下:

C++知识点总结全系列文章索引:
【C++知识点总结全系列 (01)】:数据类型、数据类型转换和变量
【C++知识点总结全系列 (02)】:C++中的语句、运算符和表达式详细总结
【C++知识点总结全系列 (03)】:函数(函数参数传递、可变参数、函数返回值等详细介绍)
【C++知识点总结全系列 (04)】:C++类的详细总结与分析
【C++知识点总结全系列 (05)】:IO 类的详细总结和分析
【C++知识点总结全系列 (06)】:STL六大组件总结- 配置器、容器、迭代器、适配器、算法和仿函数
【C++知识点总结全系列 (07)】:模板与泛型编程详细总结与分析
【C++知识点总结全系列 (08)】:面向对象编程OOP


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

相关文章:

  • 私域运营 组织架构
  • Netty HTTP
  • 什么是边缘计算技术和边缘计算平台?
  • 自然语言处理(NLP)——法国工程师IMT联盟 期末考试题
  • Linux内核编译安装 - Deepin,Debian系
  • 安全防御,防火墙配置NAT转换智能选举综合实验
  • 追溯源码观察HashMap底层原理
  • 为什么渲染农场渲染的是帧,而不是视频?
  • windows镜像下载网站
  • ollama + fastgpt 搭建免费本地知识库
  • pytorch中一些最基本函数和类
  • 排序——归并排序及排序章节总结
  • python的readline()和readlines()
  • 【ARM】使用JasperGold和Cadence IFV科普
  • 深入探讨极限编程(XP):技术实践与频繁发布的艺术
  • 【代码随想录_Day30】1049. 最后一块石头的重量 II 494. 目标和 474.一和零
  • 【时时三省】tessy 集成测试:小白入门指导手册
  • 通过vagrant与VirtualBox 创建虚拟机
  • 第13章 更多的结构化命令《Linux命令行与Shell脚本编程大全笔记》
  • 【计算机网络】学习指南及导论
  • 安装mitmproxy失败
  • 安装adb和常用命令
  • C++ 几何计算库
  • 云动态摘要 2024-07-16
  • 数仓工具—Hive基础之临时表及示例
  • 机体坐标系和导航坐标系
  • 软件测试——web单功能测试
  • django-ckeditor富文本编辑器
  • 鸿蒙模拟器(HarmonyOS Emulator)Beta申请审核流程
  • VUE:跨域配置代理服务器