1、extern "C"的解释

一个C++程序包含其它语言编写的部分代码。C++编写的代码片段可能被使用在其它语言编写的代码中,不同语言编写的代码互相调用是困难的,甚至是同一种编写的代码但不同的编译器编译的代码。例如,不同语言和同种语言的不同实现可能会在注册变量保持参数和参数在栈上的布局,这个方面不一样。

为了使它们遵守统一规则,可以使用extern指定一个编译和连接规约。例如,声明C和C++标准库函数strcyp(),并指定它应该根据C的编译和连接规约来链接:

extern "C" char* strcpy(char*,const char*);

注意它与下面的声明的不同之处:
        
    extern char* strcpy(char*,const char*);

下面的这个声明仅表示在连接的时候调用strcpy()。

extern "C"指令非常有用,因为C和C++的近亲关系。注意:extern "C"指令中的C,表示的一种编译和连接规约,而不是一种语言。C表示符合C语言的编译和连接规约的任何语言,如Fortran、assembler等。

还有要说明的是,extern "C"指令仅指定编译和连接规约,但不影响语义。例如在函数声明中,指定了extern "C",仍然要遵守C++的类型检测、参数转换规则。

再看下面的一个例子,为了声明一个变量而不是定义一个变量,你必须在声明时指定extern关键字,

C和C++之用extern “C“实现它们之间的互调相关推荐

  1. C++ 笔记(05)— 变量(变量定义、声明、初始化、extern关键字、变量之间转换)

    1. 变量定义 变量定义就是告诉编译器在何处创建变量的存储,以及如何创建变量的存储.变量定义指定一个数据类型,并包含了该类型的一个或多个变量的列表,如下所示: type variable_list; ...

  2. c语言中extern关键字_了解C语言中的extern关键字

    c语言中extern关键字 In this article, we'll take a look at understanding the extern keyword in C. 在本文中,我们将了 ...

  3. 《深度探索C++对象模型》--3 Data语意学

     1.Data Member的绑定 (1)"memberrewriting rule",一个inline函数实体,在整个class声明未被完全看见之前,是不会被评估求值的.所以 ...

  4. C#与C++ DLL的交互

    C#与C++交互,总体来说可以有两种方法: 1.利用C++/CLI作为代理中间层 2.利用PInvoke实现直接调用   第一种方法:实现起来比较简单直观,并且可以实现C#调用C++所写的类,但是问题 ...

  5. C#与C/C++的交互zz

    C#与C++交互,总体来说可以有两种方法: 利用C++/CLI作为代理中间层 利用PInvoke实现直接调用 第一种方法:实现起来比较简单直观,并且可以实现C#调用C++所写的类,但是问题是MONO构 ...

  6. C#与C/C++的交互

    warensoft 工作室博客园首页 Warensoft 工作室:承接.NET应用项目开发,游戏开发   博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅  :: 管理 ...

  7. Spring Cloud 笔记

    文章目录 第⼀部分 微服务架构 第 1 节 互联⽹应⽤架构发展(回顾) 第 2 节 微服务架构体现的思想及优缺点 第 3 节 微服务架构中的⼀些概念 第⼆部分 Spring Cloud 综述 第 1 ...

  8. 嵌入式C语言——学习笔记

    嵌入式C语言--学习笔记 计算机程序语言的学习思路? GCC的使用及其常用选项介绍 gcc概述 C语言编译过程 C语言常见的错误 预处理的使用 宏展开下的 #.## C语言常用关键字及运算符操作 关键 ...

  9. Spring Cloud 微服务讲义

    Spring Cloud 微服务讲义 第一部分 微服务架构 第 1 节 互联网应用架构演进 第 2 节 微服务架构体现的思想及优缺点 第 3 节 微服务架构中的核心概念 第二部分 Spring Clo ...

最新文章

  1. 一款全屏图片滑动js 插件 超快捷
  2. 一维数组对象转成二维数组
  3. snmp 获取mac add table_R语言学习笔记(1)数据获取与数据重塑的第一部分
  4. mac instantclient_12_2 安装配置
  5. java not a jpeg file_javax.imageio.IIOException: Not a JPEG file: starts with 0x47 0x49
  6. 为什么要使用getter/setter
  7. UVa10340 - All in All
  8. Python Tensorflow下的Word2Vec代码解释
  9. VS错误的解决解决:LINK fatal error LNK1000: Internal error during IncrBuildImage
  10. java获取指定属性名_获取指定属性名的属性值简易方法
  11. python期货自动交易软件_python自动股票交易软件,求比较好用的股票自动交易软件...
  12. 计算机为什么不能新建文档,电脑无法新建word文档怎么办
  13. 计算机 在职硕士报考条件,2022在职硕士-在职研究生报考条件-中公考研
  14. 这些配色方案让数据可视化图表更加高大上
  15. linux ntp时间立即同步命令_linux时间同步,ntpd、ntpdate 【转】
  16. Matlab中int2str函数使用
  17. 手机验证码的测试用例梳理
  18. qq解冻显示服务器开小差了是什么意思,腾讯内容开放平台
  19. Codeforces 115B Lawnmower
  20. elasticsearch查询报错411状态码 The requested URL could not be retrieved

热门文章

  1. BeetleX.FastHttpApi之控制器调度设计
  2. iNeuOS 工业互联网操作系统,在核工业测控领域的成功应用
  3. IdentityServer4 之 Resource Owner Password Credentials 其实有点尴尬
  4. Oh my God, Swagger API文档竟然可以这样写?
  5. 使用 .NET 5 体验大数据和机器学习
  6. Win10 Terminal + WSL 2 安装配置指南,精致开发体验
  7. 回顾 | 进击吧! Blazor !第三期 信息交互
  8. 使用BeetleX在Linux下部署.NET多站点服务
  9. 15分钟从零开始搭建支持10w+用户的生产环境(二)
  10. Kubernetes是容器化微服务的圣杯么?