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。
extern定义全局变量的使用的更多相关文章
- 用extern定义全局变量
1.extern的作用 extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b); 则告 ...
- VC++定义全局变量及extern用法
基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern有两 ...
- C语言中定义全局变量
(1)在C语言的头文件中定义变量出现的问题 最好不要傻嘻嘻的在头文件里定义什么东西.比如全局变量: /*xx头文件*/ #ifndef _XX_头文件.H #define _XX_头文件.H in ...
- C/C++定义全局变量/常量几种方法的区别
在讨论全局变量之前我们先要明白几个基本的概念: 1. 编译单元(模块): 在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ER ...
- c语言头文件中定义全局变量的问题
c语言头文件中定义全局变量的问题 (转http://www.cnblogs.com/Sorean/) 先说一下,全局变量只能定义在 函数里面,任意函数,其他函数在使用的时候用extern声明.千万不要 ...
- C++定义全局变量/常量几种方法的区别
在讨论全局变量之前我们先要明白几个基本的概念: 1. 编译单元(模块): 在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ER ...
- c 语言中宏定义和定义全局变量的区别
宏定义和定义全局变量的区别: 1 作用时间不同. 宏定义在编译期间即会使用并替换,而全局变量要到运行时才可以. 2 本质类型不同. 宏定义的只是一段字符,在编译的时候被替换到引用的位置.在运行中是没有 ...
- C语言之在头文件中定义全局变量
通常情况下,都是在C文件中定义全局变量,在头文件中声明,但是,如果我们定义的全局变量需要被很多的C文件使用的话,那么将全局变量定义在头文件里面会方便很多,那到底是如何实现的? os_var.c文件内容 ...
- angularjs定义全局变量
angularjs定义全局变量 三种方法 直接外层定义全局变量 利用ng的value定义全局变量 利用ng的constant定义全局变量 Takl is cheap, Show me the code ...
- CodeIgniter 定义“全局变量-global variable”,可以在所有controller,model和view中使用
本文抄自http://www.cnblogs.com/webu/archive/2012/11/20/2779999.html 第一次正儿八经用CodeIgniter框架做项目,结果不会定义全局变量, ...
随机推荐
- 【中英】【吴恩达课后测验】Course 5 - 序列模型 - 第一周测验
[中英][吴恩达课后测验]Course 5 -序列模型 - 第一周测验 - 循环神经网络 上一篇:[课程4 - 第四周编程作业]※※※※※ [回到目录]※※※※※下一篇:[待撰写-课程5 -第一周编程 ...
- Springboot笔记<7>过滤器与拦截器
过滤器 拦截器 过滤器 过滤器拦截的是URL Spring中自定义过滤器(Filter)一般只有一个方法,返回值是void,当请求到达web容器时,会探测当前请求地址是否配置有过滤器,有则调用该过滤器 ...
- 如何在FastAPI中构建一个既安全又灵活的多层级权限系统?
title: 如何在FastAPI中构建一个既安全又灵活的多层级权限系统? date: 2025/06/14 12:43:05 updated: 2025/06/14 12:43:05 author: ...
- SM30里DEC数据显示0
需求:DEC数据在维护的时候显示0 1,设置数据元素对于的域带转换历程. 2,写转换历程函数(注意两个历程的输入和输出类型,这个需要修改) FUNCTION conversion_exit_zdays ...
- 实战绕过某waf后缀检测内容检测
本次测试为授权测试. 0x01 背景 弱口令进入某后台,存在任意文件上传,存在waf 测试aa后缀成功上传通过查看派单可以看到文件路径 直接上传aspx被拦截 0x02 绕过后缀名检测 先简单尝试大小 ...
- Kafka入门实战教程(8):常用的shell工具脚本
1 Kafka提供的命令行脚本 Kafka默认提供了多个命令行脚本,用于实现各种各样的功能和运维管理.从2.2版本开始,提供了多达30+个Shell脚本. 今天我们来看一些其中比较实用的Shell脚本 ...
- 【深入理解 volatile】内存可见性与同步机制详解
1. 引言 在多线程编程中,共享变量的可见性和同步问题一直是开发者面临的挑战.Java 提供了 volatile 关键字来确保变量的可见性和有序性,但它并不保证原子性.本文将深入探讨 volatile ...
- qiankunjs中vue路由使用hash模式
为什么使用hash模式 官网上举例都是拿history模式,我就想看看hash模式 history模式优在编译后缺点 file协议访问会白屏,即打包完成后,双击页面会白屏(之后还证明qiankun的微 ...
- esbuild vs webpack
先看提速效果 上图:使用默认设置(包括缩小和源映射)从头开始制作包含 10 个three.js库副本的生产包的时间.更多信息在这里. 我们当前用于 Web 的构建工具比esbuild速度可能慢 10- ...
- 前端开发系列129-进阶篇之Throttle And Debounce
本文讨论前端开发中 函数防抖 和 函数节流,它们的应用.区别以及简单实现. 在前端开发中我们可能经常需要给(页面)标签绑定一些持续触发的事件,如 resize.scroll.input.mousemo ...