c++全局变量extern
extern
extern
是 C++ 中的一个关键字,用于声明一个变量或函数是在其他文件中定义的。它的作用是告诉编译器在链接时在其他文件中寻找该变量或函数的定义。
在 C++ 中,如果一个变量或函数在多个文件中使用,那么就需要在每个文件中都声明一次该变量或函数。这时就可以使用 extern
关键字来声明该变量或函数是在其他文件中定义的。
除了在不同文件中共享变量和函数的定义、在函数中使用全局变量、在头文件中声明变量和函数、在类中声明静态成员变量外,extern
还有一些其他的用法:
- 在模板中使用外部变量
- 在命名空间中使用外部变量
- 在静态库中使用外部变量
声明变量
例如,假设我们有两个文件 a.cpp
和 b.cpp
,它们都需要使用同一个全局变量 g_var
,那么可以在 a.cpp
中定义该变量,并在 b.cpp
中使用 extern
来声明该变量:
// a.cpp
int g_var = 0;
// b.cpp
extern int g_var;
int main() {
// 使用全局变量 g_var
g_var = 1;
return 0;
}
在上面的代码中,我们在 a.cpp
中定义了全局变量 g_var
,并在 b.cpp
中使用 extern
来声明该变量。这样在链接时,编译器就会在其他文件中寻找该变量的定义。
声明函数
除了变量,extern
关键字也可以用于声明函数。例如,假设我们有两个文件 a.cpp
和 b.cpp
,它们都需要使用同一个函数 foo()
,那么可以在 a.cpp
中定义该函数,并在 b.cpp
中使用 extern
来声明该函数:
// a.cpp
void foo() {
// 函数实现
}
// b.cpp
extern void foo();
int main() {
// 调用函数 foo()
foo();
return 0;
}
在上面的代码中,我们在 a.cpp
中定义了函数 foo()
,并在 b.cpp
中使用 extern
来声明该函数。这样在链接时,编译器就会在其他文件中寻找该函数的定义。
在类中声明静态成员变量
在 C++ 中,如果一个类有静态成员变量,那么需要在类的定义外部进行定义。如果该静态成员变量是在其他文件中定义的,那么可以使用 extern
来声明它。例如:
// a.cpp
class MyClass {
public:
static int s_var;
};
int MyClass::s_var = 0;
// b.cpp
class MyClass;
extern int MyClass::s_var;
void foo() {
// 使用静态成员变量 s_var
MyClass::s_var++;
}
在上面的代码中,我们在 a.cpp
中定义了类 MyClass
,并在类的定义外部定义了静态成员变量 s_var
。在 b.cpp
中,我们使用 extern
来声明静态成员变量 s_var
是在其他文件中定义的。在函数 foo()
中,我们可以直接使用静态成员变量 s_var
。
在静态库中使用外部变量
在 C++ 中,如果在静态库中使用一个外部变量,那么可以使用 extern
来声明该变量是在其他文件中定义的。例如:
// a.cpp
int g_var = 0;
// b.cpp
void foo() {
// 使用外部变量 g_var
extern int g_var;
g_var++;
}
// libmylib.a
ar rcs libmylib.a a.o b.o
在上面的代码中,我们在 a.cpp
中定义了全局变量 g_var
,在 b.cpp
中使用 extern
来声明该变量是在其他文件中定义的。然后将 a.o
和 b.o
打包成静态库 libmylib.a
。在其他程序中使用该静态库时,就可以直接使用外部变量 g_var
。
c++全局变量extern的更多相关文章
- IOS总结 静变量static、全局变量extern、局部变量、实例变量
1.静态变量 static 什么是静态变量:从面向对象的角度触发,当需要一个数据对象为整类而非某个对象服务,同时有力求不破坏类的封装性,既要求此成员隐藏在类的内部,有要求对外不可见的时候,就可以使用s ...
- 当局部变量遇上全局变量——extern及花括号用法举例
请阅读以下代码并说出它的输出结果. #include <stdio.h> ; int foo() { ; { extern int val; printf("val_foo = ...
- Keil C 中全局变量 extern 的使用
在KEIL C中,有多个源文件使用到全局变量时,可以在一个源文件中定义全局变量,在另外的源文件中用extern 声明该变量,说明该变量定义在别的文件中,将其作用域扩展到此文件. 例如:有以下两个源文件 ...
- IOS开发之----全局变量extern的使用
extern,作用在IOS中,为了使用全局变量.比写在appDelegate和定义单例方便一些: 举例: 1.MyExternClass.h添加这个类,并在.m文件添加 代码 #import &quo ...
- 利用extern共享全局变量
方法: 在xxx.h中利用extern关键字声明全局变量 extern int a; 在xxx.cpp中#include<xxx.h> 再定义 int a; 赋不赋初值无所谓,之后该全局变 ...
- 李洪强iOS经典面试题155 - const,static,extern详解(面试必备)
李洪强iOS经典面试题155 - const,static,extern详解(面试必备) 一.const与宏的区别(面试题): const简介:之前常用的字符串常量,一般是抽成宏,但是苹果不推荐我们抽 ...
- C语言中定义全局变量
(1)在C语言的头文件中定义变量出现的问题 最好不要傻嘻嘻的在头文件里定义什么东西.比如全局变量: /*xx头文件*/ #ifndef _XX_头文件.H #define _XX_头文件.H in ...
- C++全局变量的声明和定义
(1)编译单元(模块) 在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编译器做了两步工作: 第一步,将每个.cpp(.c)和相应的.h文件编译成obj文件: 第二步,将工程中所有 ...
- iOS- static extern const
1.静态变量 static 什么是静态变量:从面向对象的角度触发,当需要一个数据对象为整类而非某个对象服务,同时有力求不破坏类的封装性,既要求此成员隐藏在类的内部,有要求对外不可见的时候,就可以使用 ...
- c语言局部变量 静态局部变量 全局变量与静态全局变量
基本概念: 作用域:起作用的区域,也就是可以工作的范围. 代码块:所谓代码块,就是用{}括起来的一段代码. 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的. ...
随机推荐
- Solon2 开发之插件,四、插件热插拔管理机制(H-Spi)
插件热插拔管理机制,简称:H-Spi.是框架提供的生产时用的另一种高级扩展方案.相对E-Spi,H-Spi 更侧重隔离.热插热拔.及管理性. 应用时,是以一个业务模块为单位进行开发,且封装为一个独立插 ...
- 性能提升-如何设置Windows操作系统TIME_WAIT状态的TCP连接快速回收时间?
大规模Windows环境下,采用Nginx反向代理服务后,操作系统会产生较多TIME_WAIT的TCP(Transmission Control Protocol)连接,操作系统默认TIME_WAIT ...
- Intellij IDEA、 Pycharm 格式化换行,竖线修改 最大 分隔 线
Intellij IDEA. Pycharm 等开发工具,超过 竖线,Ctrl + L 格式化时,就会换行 格式化后,现在的显示器分辨率高,这样右边一大片空白,看起来很不舒服 File -> S ...
- Sublime Text 16进制显示
大文件推荐使用 UltraEdit 工具 Sublime Text 16进制显示(可以直接显示不同数据类型转换后的结果,不用在线工具,转二进制了) 安装 HexViewer 插件 1. Ctrl + ...
- 多图预警,DreamBooth 微调黑客松结果发布啦!
去年 12 月底,我们面向全球的开发者举办了 DreamBooth 编程马拉松活动.通过 DreamBooth,你可以使用少量的图像对文生图模型进行微调,将你「喂给」模型的图片信息进行命名,就可以通过 ...
- PS CJ34预算转借
一.CJ34,输入发出预算和接收预算的WBS 二.调用BAPI "-----------------------------------------@斌将军----------------- ...
- C++ lambda 内 std::move 失效问题的思考
最近在学习 C++ Move 时,有看到这样一个代码需求:在 lambda 中,将一个捕获参数 move 给另外一个变量. 看似一个很简单常规的操作,然而这个 move 动作却没有生效. 具体代码如下 ...
- 【题解】Qin Shi Huang's National Road System HDU - 4081 ⭐⭐⭐⭐ 【次小生成树】
During the Warring States Period of ancient China(476 BC to 221 BC), there were seven kingdoms in Ch ...
- Kite 使用教程 轻量级代码提示
概述 今天看小甲鱼视频的VSC Python 安装教程里视频博主强烈推荐安装Kite插件 ,这是什么玩意? 下载下来试一试? 原来:就是一个代码提示插件.. 说白了" 就是让开发者 在轻量级 ...
- element的table组件在flex布局下宽度不能自适应
问题描述 用了flex布局,左侧固定宽度,右侧flex:1:(表格在右侧区域),且中间容器都有width:100%,当将屏幕变大,表格随着变宽,当屏幕变小时,表格不会随着屏幕变小,宽度无法自适应. 解 ...