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

目录

    • 链接指示extern "C"
      • A.What(概念)
      • [B.Why(extern "C"的作用)](#B.Why(extern "C"的作用))
      • [C.How (如何使用链接指示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")

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

  • 常规使用:

    cpp 复制代码
    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
  • 链接指示与头文件

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

    cpp 复制代码
    // 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


相关推荐
陌路2011 小时前
C23构造函数与析构函数
开发语言·c++
_OP_CHEN11 小时前
C++进阶:(二)多态的深度解析
开发语言·c++·多态·抽象类·虚函数·多态的底层原理·多态面试题
金色熊族13 小时前
装饰器模式(c++版)
开发语言·c++·设计模式·装饰器模式
Dream it possible!13 小时前
LeetCode 面试经典 150_链表_旋转链表(64_61_C++_中等)
c++·leetcode·链表·面试
CS创新实验室16 小时前
典型算法题解:长度最小的子数组
数据结构·c++·算法·考研408
我有一些感想……16 小时前
浅谈 BSGS(Baby-Step Giant-Step 大步小步)算法
c++·算法·数论·离散对数·bsgs
j_xxx404_16 小时前
C++ STL:string类(3)|operations|string类模拟实现|附源码
开发语言·c++
Elias不吃糖18 小时前
Linux 环境适应 Day 1 全面笔记
linux·c++·笔记
无限进步_19 小时前
C语言字符串连接实现详解:掌握自定义strcat函数
c语言·开发语言·c++·后端·算法·visual studio
oscar99919 小时前
CSP-J教程——第一阶段——第二课:变量与数据类型
c++·数据类型·csp-j