C++的链接指示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语言不支持函数的重载
在这里插入图片描述

相关推荐

  1. 理解 externC“:跨语言桥梁

    2024-07-12 19:06:03       25 阅读
  2. externC作用

    2024-07-12 19:06:03       31 阅读
  3. c编译与执行

    2024-07-12 19:06:03       50 阅读
  4. c# 类方法例子

    2024-07-12 19:06:03       37 阅读
  5. C++】C++中extern用法

    2024-07-12 19:06:03       23 阅读
  6. extern cextern c++

    2024-07-12 19:06:03       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 19:06:03       70 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 19:06:03       74 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 19:06:03       62 阅读
  4. Python语言-面向对象

    2024-07-12 19:06:03       72 阅读

热门阅读

  1. python .join用法

    2024-07-12 19:06:03       20 阅读
  2. 力扣995.K连续位的最小翻转次数

    2024-07-12 19:06:03       25 阅读
  3. ubuntu cp 命令 拷贝文件

    2024-07-12 19:06:03       22 阅读
  4. 探索 Scikit-Learn:机器学习的强大工具库

    2024-07-12 19:06:03       22 阅读
  5. C# —— try catch

    2024-07-12 19:06:03       18 阅读
  6. 机器学习 - one-hot编码技术

    2024-07-12 19:06:03       23 阅读
  7. 【人生苦短,我学 Python】(15)迭代器、生成器

    2024-07-12 19:06:03       24 阅读
  8. hot100 | 十、回溯

    2024-07-12 19:06:03       23 阅读
  9. Eureka: Netflix开源的服务发现框架

    2024-07-12 19:06:03       21 阅读
  10. Gradle 介绍

    2024-07-12 19:06:03       17 阅读
  11. tomcat

    2024-07-12 19:06:03       17 阅读
  12. 【jxls 单元格合并】

    2024-07-12 19:06:03       16 阅读
  13. 基于Hadoop的区块链海量数据存储的设计与实现

    2024-07-12 19:06:03       21 阅读
  14. 1 HTML and CSS

    2024-07-12 19:06:03       20 阅读
  15. 通用脚本大全

    2024-07-12 19:06:03       20 阅读
  16. c#猜数字小游戏

    2024-07-12 19:06:03       23 阅读