extern定义全局变量的使用
1、extern的作用
extern
关键字在C/C++中用来声明一个全局变量,指出这个全局变量在另一个文件中定义,也可以用来引用一个全局变量
假设我们有三个文件:commands.h
,main.cpp
,和other.cpp
。我们在commands.h
中声明了一个全局变量 flightCommand1
,然后在main.cpp
中定义并初始化这个变量,最后在other.cpp
中使用这个变量。
commands.h
这是头文件,它包含了flightCommand1
的声明。使用extern
关键字声明变量,表示它的定义在别的地方。
1 #ifndef COMMANDS_H
2 #define COMMANDS_H
3
4 #include <QList>
5 #include <QString>
6
7 extern QList<QString> flightCommand1;
8
9 #endif // COMMANDS_H
main.cpp
这是主程序文件,它包含了flightCommand1
的定义和初始化。注意,在这里我们不使用extern
关键字
1 #include "commands.h"
2
3 // 定义并初始化 flightCommand1
4 QList<QString> flightCommand1 = {};
5
6 int main() {
7 // 这里可以填充 flightCommand1 或者执行其他操作
8 flightCommand1.append("Command1");
9 flightCommand1.append("Command2");
10
11 return 0;
12 }
other.cpp
这是另一个程序文件,它展示了如何使用在commands.h
中声明的全局变量flightCommand1
。在这个文件中,我们只需要包含commands.h
头文件。由于flightCommand1
是用extern
声明的,编译器知道去查找在别的文件中定义的该变量。
1 #include "commands.h" 2 #include <iostream> 3 4 void printCommands() { 5 for (const QString& cmd : flightCommand1) { 6 std::cout << cmd.toStdString() << std::endl; 7 } 8 } 9 10 int main() { 11 printCommands(); 12 return 0; 13 }
在commands.h
中使用extern
关键字声明全局变量flightCommand1
:这告诉编译器该变量在程序的其他地方(另一个文件)被定义。这样,任何包含了commands.h
的文件都会知道flightCommand1
的存在,但不会在这些文件中创建新的变量实例。
在main.cpp
中定义和初始化flightCommand1
:这里是flightCommand1
实际存储空间的创建位置。由于这个定义提供了变量的实际存储和初始值,因此不需要(也不能)使用extern
关键字。
在other.cpp
(或任何其他包含commands.h
的文件)中使用flightCommand1
:由于commands.h
已经通过extern
声明了flightCommand1
,因此当other.cpp
包含了这个头文件时,它就能够使用这个全局变量。在这种情况下,不需要在other.cpp
中再次使用extern
来声明flightCommand1
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律