目录

  • 1. 作用
  • 2.extern
  • 3."C"

1. 作用

extern “C”主要作用是实现C++代码正确调用C代码。加上extern “C”后,编译器编译这部分代码时,会按照C语言进行编译。因为C++支持函数重载,所以编译器编译C++代码时,会将参数类型一起编到编译后的代码中。但是C编译的时候只会将函数名编译到编译后的代码中。

2.extern

extern是编程语言中的一种属性,表示变量、函数等类型的作用域属性,是一个关键字。编译器编译时extern告诉编译器它所声明的函数和变量已经在其他文件中定义,可以其他地方使用。通常在“.c”文件中声明定义变量或者函数,并在“.h”文件中使用该关键字限定变量或者函数,然后可在其他文件或者模块中用include使用,如:

//test1.c
//声明定义,定义时会为其分配空间
int i = 32;
//test1.h
//使用test.c中定义的i
extern int i;
//test2.c
//在其他文件中调用该变量
#include "test.h"
void fun(void){if(i > 0){print("test extern");}
}

3.“C”

多种编程语言会在使用时出现嵌套或者相互调用的情况。如C和C++之间就经常出现互相调用的。虽然C++是C的扩展,但是它们之间的编译器是不同的,这就产生了各自的编译器在对C和C++进行编译的时候要依据那一个作为大家都互相认可的规范或者约定。这就是“C”的出处,“C”就是这样一个约定:

  • 这种调用编译是一种超链接
  • 这种调用编译不能影响现有的编译规则
  • C++是C的拓展

所以extern “C”中,extern表示关键字属性,在其他地方可以使用。“C”就表示了编译器的连接规范。合在一起就可以理解为在C++/C的混合编程下进行编译。

//如果使用的是C++,extern “C”有效,extern “C”中的代码使用C编译器
#ifdef __cplusplusextern "C" {
#endif...//需要使用C编译器的编译的代码
//结束使用C编译器
#ifdef __cplusplus}
#endif

extern “C”的含义相关推荐

  1. [转]C++中extern C的含义

    注:本文来自Internet.原文作者已无从考证.若您是原文作者,请给出具体的证明后,我将及时标明作者及出处. 1.引言 C++语言的创建初衷是"a better C",但是这并不 ...

  2. 【c++】c++常见关键词const、static、extern、explicit含义

    c++里有几个常见的关键词,比如const.static.extern.explicit,这里就简单介绍下每个关键词的含义以及使用场景. const const相对来说还是比较简单易懂的,就是被修饰的 ...

  3. C++项目中的extern C {}

    2010-07-10 19:45 by 吴秦, 92864 阅读, 22 评论, 收藏, 编辑 引言 在用C++的项目源码中,经常会不可避免的会看到下面的代码: ? 1 2 3 4 5 6 7 8 9 ...

  4. extern c用法解析

    extern "c"用法解析 字数1875 阅读38631 评论4 喜欢20 引言 C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数.但是,C++毕竟 ...

  5. 关于 extern C的说明

    在用C++的项目源码中,经常会不可避免的会看到下面的代码 1 #ifdef __cplusplus 2 extern "C" { 3 #endif 4 5 /*...*/ 6 7 ...

  6. 语言基础(9):static, extern 和 inline

    C++关键字 static.extern.inline 单独的含义和用法都不难,但组合起来的含义常常比较含糊,本文主要分析 static inline 和 extern inline.引用 Linux ...

  7. __cdecl、__stdcall、__fastcall 与 __pascal 浅析

    X86调用约定 calling convention:https://www.cnblogs.com/shangdawei/p/3323252.html __cdecl.__stdcall.__fas ...

  8. python3怎么使用pyrex_用户指南 - Cython 和 Pyrex 之间的区别 - 《Cython 3.0 中文文档》 - 书栈网 · BookStack...

    Cython 和 Pyrex 之间的区别 警告 Cython 和 Pyrex 都是移动目标.已经到了这一点,两个项目之间所有差异的明确列表将很难列出和跟踪,但希望这个高级列表能够了解存在的差异.应该注 ...

  9. C++项目中编译部分C的代码

    在C++项目中如果真能编译部分C的代码,那么一定会用到一下语句 #ifdef __cplusplus extern "C" { #endif /*...*/ #ifdef __cp ...

最新文章

  1. container常见操作
  2. 四叶草社交平台——十天冲刺(10)
  3. 每日一题(47)—— 置1与清0
  4. Python求二次方程根
  5. 单工,半双工,全双工区别以及TDD和FDD区别
  6. 使用N2N搭建虚拟局域网|可用于红警、我的世界联机
  7. LIC2020 百度语言与智能技术竞赛(一)——语义解析冠军方案
  8. 本周AI热点回顾:「时空版」Transformer训练速度远超3D CNN;拒绝内卷的AI狼火了!不想抓羊只想躺!...
  9. 删除hdfs上的内容报错:rm: Cannot delete /wxcm/ Name node is in safe mode.
  10. 华为MAC-VLAN举例
  11. 【分布式】分布式系统概述
  12. 推荐一款过滤百度广告的神器
  13. 2019年 支付宝集福攻略
  14. CF727E. Games on a CD (Hash)
  15. ROS系列(四):ROS通信机制系列(3):参数服务器
  16. android 辅助功能 模拟点击,Android模拟点击的四种方式
  17. 几行Python代码实现自动陪女友聊天,制作开心机器人
  18. 创新案例分享 | 临床研究数据信息互联互通,共创医疗新局面
  19. 重磅!《阿里聚安全 2016 年报》正式发布!
  20. 浪涌保护器:保护电子设备免受雷击侵害

热门文章

  1. 来看一下:构造函数的小秘密详解
  2. 技术栈是什么_我从找不到实习到拿大厂offer经历了什么?
  3. Keras——用Keras搭建自编码神经网络(AutoEncoder)
  4. Python基础——全局变量与局部变量
  5. 3D中obj文件操作
  6. Tensorflow训练和预测中的BN层的坑(转载)
  7. 将16进制unsigned char数组转换成整数
  8. mysql的二级索引
  9. 深入分析linux内核源码
  10. 管理结果集和分析结果集