当前位置: 首页 > news >正文

如何引用一个已经定义过的全局变量?

如何引用一个已经定义过的全局变量?
答 、可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变量,假定你将那个变量写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。

好的,下面用 C++ 编写一个示例,说明使用头文件和 extern 关键字来引用已定义的全局变量的区别。

示例结构

我们将创建三个文件:

  1. global.h — 声明全局变量。
  2. global.cpp — 定义全局变量。
  3. main.cpp — 使用头文件和 extern 引用全局变量。

代码

1. global.h
#ifndef GLOBAL_H
#define GLOBAL_H// 声明全局变量
extern int globalVar;#endif
2. global.cpp
#include "global.h"// 定义全局变量
int globalVar = 42;
3. main.cpp
#include <iostream>
#include "global.h"   // 引用头文件的方式extern int globalVarWrong; // 使用 extern 引用,但拼写错误int main() {// 使用头文件引用的全局变量std::cout << "globalVar (通过头文件): " << globalVar << std::endl;// 使用 extern 引用的全局变量std::cout << "globalVarWrong (通过 extern,拼写错误): " << globalVarWrong << std::endl;return 0;
}

解释

  • main.cpp 中,我们通过头文件 global.h 引用了正确声明的 globalVar
  • 同时,我们使用 extern 声明了一个变量 globalVarWrong,但这个名称是错误的,实际变量名是 globalVar

编译和错误信息

  1. 使用头文件声明的变量globalVarglobal.h 中正确声明,因此在 main.cpp 中编译和连接都不会有问题。
  2. 使用 extern 声明的错误变量globalVarWrong 是通过 extern 引用的,且名称错误,因此编译器不会报错,但在连接时会报错。

连接错误示例

在编译和连接时,将出现类似以下的连接错误(具体错误信息取决于编译器):

main.cpp:(.text+0x...): undefined reference to `globalVarWrong'

总结

  • 使用头文件声明的变量,如果拼写错误,在编译阶段会检测到,因为头文件的声明需要与定义匹配。
  • 使用 extern 引用的变量,如果拼写错误,编译阶段不会报错,但会在连接阶段报错,因为 extern 只是一个引用声明,编译器不会检查是否已定义。

http://www.mrgr.cn/news/64089.html

相关文章:

  • 微信小程序 app.json 配置文件解析与应用
  • TestMAX/DFT Compiler:时序单元的类型、连接顺序和后DFT优化
  • cesium通过经纬度获取3dtiles 得feature信息
  • MAC M4安装QT使用国内镜像源在线安装
  • Linux 下 Mamba 环境安装踩坑问题汇总(重置版)
  • React 高级组件开发:动态逻辑与性能优化
  • 【含文档】基于ssm+jsp的智慧篮球馆预约(含源码+数据库+lw)
  • 【含文档】基于Springboot+Vue的工商局商家管理系统 (含源码数据库+LW)
  • 基于javaweb(springboot+mybatis)网站建设服务管理系统设计和实现以及文档报告设计
  • ssm毕业设计选题系统+jsp
  • HTML 基础标签——表格标签<table>
  • cangjie仓颉程序设计-怎么排序(二)
  • 从头开始学PHP之面向对象
  • 2025生物发酵展(济南)为生物制造产业注入新活力共谱行业新篇章
  • 仓颉刷题录-二维数组(二)
  • 第15届蓝桥杯省赛真题剖析-2024年8月24日Scratch中级组
  • 使用Github下载YOLO v5项目教程
  • 面试题:JVM(六)
  • TOP级AI驱动的单元测试工具推荐
  • 自由学习记录(17)
  • c 到 c++ 过渡
  • Spring源码学习(三):finishBeanFactoryInitialization
  • 亚马逊降佣刺激印度市场,中小卖家利好消息,测评助力扬帆起航
  • YOLOv11改进策略【注意力机制篇】| CVPRW-2024 分层互补注意力混合层 H-RAMi 针对低质量图像的特征提取模块
  • 【算法+C#】重写HashCode,去重相同坐标的二维点
  • 全面解析 ESPnet:Aishell 项目深入指南