cpp extern 关键字用法
语法说明:
extern 可以置于变量或者函数前,以标示变量或者函数的在别的文件中定义,提示编译器遇到此变量和函数后,在其他模块中寻找其定义。此外extern也可用来进行链接指定。
即 extern 有两个作用:
一、与 ”C” 一起连用,如: extern “C” void fun(int a, int b);
此时编译器在编译 fun 这个函数名时,按着 C 的规则去翻译相应的函数名而不是 C++ 的。
C++的规则在编译这个函数名时会把 fun 这个名字变类似 fun@aBc_int_int#%$ 的格式。(注意:C++ 支持函数的重载)
二、当 extern 不与 ”C” 在一起修饰变量或函数时,如在头文件中: extern int g_Int;
它的作用就是 声明 函数或全局变量。其声明的函数和变量可以在本模块(编译单元,如 .cpp 文件)或其他模块中使用(注意:这里是声明,不是定义)
也就是说 B 模块要是引用 A 模块中定义的全局变量或函数时,它只要包含 A 模块的头文件即可。
在编译阶段,模块 B 虽然找不到该函数或变量,但它不会报错,它会在链接时从模块 A 生成的目标代码中找到此函数。
//fileA.cpp
int i = ; // declaration and definition //fileB.cpp
extern int i; // declaration only. same as i in FileA //fileC.cpp
extern int i; // declaration only. same as i in FileA //fileD.cpp
int i = ; // LNK2005! 'i' already has a definition.
extern int i = ; // same error (extern is ignored on definitions)
声明与定义的区别:
extern int a; //声明 int a; //定义
int a = ; //定义
extern int a =; //定义
一般在头文件中申明,用 extern, 在 cpp 中定义。 如果在头文件中定义,如果这个头文件被多个 cpp 引用,编译时会报重复定义的错误。
另外在 .h 文件中通过 static 来声明变量,这样可以被其他文件引用,但程序运行时会在每个模块中都创建一个相同的变量。
如果在 .cpp 文件中声明 static 变量,其他 .cpp 文件是无法访问该变量的。
参考资源:
https://blog.csdn.net/u012611878/article/details/78697971
https://docs.microsoft.com/en-us/cpp/cpp/extern-cpp?view=vs-2019
cpp extern 关键字用法的更多相关文章
- C++中extern关键字用法小结
总结C++中关于extern关键字的用法. 1.变量的生明和定义中 C++语言支持分离式编译机制,该机制允许将程序分割为若干个文件,每个文件可被独立编译.为了将程序分为许多文件,则需要在文件中共享代码 ...
- 解决全局变量共享---C语言的extern关键字用法
在调试程序时,有一个参数需要在多个函数之间传递,因为是作为调试参数,不想将参数引入到函数中. 很自然的想到使用全局变量来表示这个公共参数,工程代码的结构如下: main.c test.c test.h ...
- C语言中的extern关键字用法
在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”. 1. extern修饰变量的声明.举例来说,如果文件a.c需要引用b.c中变量int v ...
- extern "c"用法解析
转自: extern "c"用法解析 - 简书 引言 C++保留了一部分过程式语言的特点,因而它可以定义不属于任何类的全局变量和函数.但是,C++毕竟是一种面向对象的程序设计语言, ...
- extern的用法
extern作为外部函数声明的用法: 1. 可以扩展函数的应用范围: 107.h #ifndef _107H_ #def _107H_ extern void func(); #endif 107.c ...
- extern "C" 用法解析
extern "c"用法解析 作者 作者Jason Ding ,链接http://www.jianshu.com/p/5d2eeeb93590 引言 C++保留了一部分过程式语言的 ...
- 有关extern的用法
1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同.作为一种欲与C兼容的语言, C++保留了一部分过程式 ...
- 变量的声明和定义以及extern的用法
变量的声明和定义以及extern的用法 变量的声明不同于变量的定义,这一点往往容易让人混淆. l 变量 ...
- 关于extern的用法
extern表示该变量或者函数时在另一个地方定义了. 在C++编程中,如果将程序分为多个文件,则需要有在文件间共享代码的方法,这时如果一个变量或者函数需要在多个文件中使用,则可以使用extern来声明 ...
随机推荐
- 基于node+koa2+mongodb实现简单的导航管理系统
基于node+koa2+mongodb实现简单的导航管理系统 项目说明 本项目gitbub地址 https://github.com/xuess/nav-admin,喜欢请star 基于node 实现 ...
- lint (software)
lint (software) - Wikipedia https://en.wikipedia.org/wiki/Lint_(software) A linter or lint refers to ...
- Mongoose Embedded Web Server Library
https://github.com/cesanta/mongoose http://ltp.ai/docs/ltpserver.html LTP Server在轻量级服务器程序mongoose基础上 ...
- vue中导出Excel表格
项目中我们可能会碰到导出Excel文件的需求,一般后台管理系统中居多,将table中展示的数据导出保存到本地.当然我们也可以通过一些处理来修改要导出的数据格式,具体需求具体对待. 1.首先我们需要安装 ...
- react native 中的redux 理解
redux 中主要分为三大块,分别是Action Reducer 与Store. 1.Action是js的一个普通对象,是store数据的唯一来源.通过store.dispath()讲action传到 ...
- HDU3613 Best Reward —— Manacher算法 / 扩展KMP + 枚举
题目链接:https://vjudge.net/problem/HDU-3613 Best Reward Time Limit: 2000/1000 MS (Java/Others) Memor ...
- MYSQL进阶学习笔记三:MySQL流程控制语句!(视频序号:进阶_7-10)
知识点四:MySQL流程控制语句(7-10) 选择语句: (IF ELSE ELSE IF CASE 分支)IFNULL函数 IF语法: 语法规则: IF search_condition THEN ...
- 一步一步学Silverlight 2系列(20):如何在Silverlight中与HTML DOM交互(下)
述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- BZOJ_4383_[POI2015]Pustynia_线段树优化建图+拓扑排序
BZOJ_4383_[POI2015]Pustynia_线段树优化建图+拓扑排序 Description 给定一个长度为n的正整数序列a,每个数都在1到10^9范围内,告诉你其中s个数,并给出m条信息 ...
- angularJS ng-if的用法
ng-if主要是用来判断是否显示,也可以做为而者选择其中一个的方法,满足判断条件ng-if="变量名" 显示,否者不显示,也可以用ng-if="!变量名"取反, ...