extern “C”的含义
目录
- 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”的含义相关推荐
- [转]C++中extern C的含义
注:本文来自Internet.原文作者已无从考证.若您是原文作者,请给出具体的证明后,我将及时标明作者及出处. 1.引言 C++语言的创建初衷是"a better C",但是这并不 ...
- 【c++】c++常见关键词const、static、extern、explicit含义
c++里有几个常见的关键词,比如const.static.extern.explicit,这里就简单介绍下每个关键词的含义以及使用场景. const const相对来说还是比较简单易懂的,就是被修饰的 ...
- C++项目中的extern C {}
2010-07-10 19:45 by 吴秦, 92864 阅读, 22 评论, 收藏, 编辑 引言 在用C++的项目源码中,经常会不可避免的会看到下面的代码: ? 1 2 3 4 5 6 7 8 9 ...
- extern c用法解析
extern "c"用法解析 字数1875 阅读38631 评论4 喜欢20 引言 C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数.但是,C++毕竟 ...
- 关于 extern C的说明
在用C++的项目源码中,经常会不可避免的会看到下面的代码 1 #ifdef __cplusplus 2 extern "C" { 3 #endif 4 5 /*...*/ 6 7 ...
- 语言基础(9):static, extern 和 inline
C++关键字 static.extern.inline 单独的含义和用法都不难,但组合起来的含义常常比较含糊,本文主要分析 static inline 和 extern inline.引用 Linux ...
- __cdecl、__stdcall、__fastcall 与 __pascal 浅析
X86调用约定 calling convention:https://www.cnblogs.com/shangdawei/p/3323252.html __cdecl.__stdcall.__fas ...
- python3怎么使用pyrex_用户指南 - Cython 和 Pyrex 之间的区别 - 《Cython 3.0 中文文档》 - 书栈网 · BookStack...
Cython 和 Pyrex 之间的区别 警告 Cython 和 Pyrex 都是移动目标.已经到了这一点,两个项目之间所有差异的明确列表将很难列出和跟踪,但希望这个高级列表能够了解存在的差异.应该注 ...
- C++项目中编译部分C的代码
在C++项目中如果真能编译部分C的代码,那么一定会用到一下语句 #ifdef __cplusplus extern "C" { #endif /*...*/ #ifdef __cp ...
最新文章
- container常见操作
- 四叶草社交平台——十天冲刺(10)
- 每日一题(47)—— 置1与清0
- Python求二次方程根
- 单工,半双工,全双工区别以及TDD和FDD区别
- 使用N2N搭建虚拟局域网|可用于红警、我的世界联机
- LIC2020 百度语言与智能技术竞赛(一)——语义解析冠军方案
- 本周AI热点回顾:「时空版」Transformer训练速度远超3D CNN;拒绝内卷的AI狼火了!不想抓羊只想躺!...
- 删除hdfs上的内容报错:rm: Cannot delete /wxcm/ Name node is in safe mode.
- 华为MAC-VLAN举例
- 【分布式】分布式系统概述
- 推荐一款过滤百度广告的神器
- 2019年 支付宝集福攻略
- CF727E. Games on a CD (Hash)
- ROS系列(四):ROS通信机制系列(3):参数服务器
- android 辅助功能 模拟点击,Android模拟点击的四种方式
- 几行Python代码实现自动陪女友聊天,制作开心机器人
- 创新案例分享 | 临床研究数据信息互联互通,共创医疗新局面
- 重磅!《阿里聚安全 2016 年报》正式发布!
- 浪涌保护器:保护电子设备免受雷击侵害