【C++关键字】 extern

C++中的extern 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar 阅读详情

一、 extern 关键字

extern 是C/C++语言中表明全局变量或者函数作用范围(可见性)的关键字,编译器收到extern通知,则其声明的变量或者函数可以在本模块或者其他模块使用。extern关键字的作用是共享代码。

注意事项:它的作用就是声明函数或全局变量的作用范围的关键字,仅仅是声明,不是定义,不分配空间

extern可以修饰函数和变量,但是一般不用于函数,重点是用于变量的情况。

// myheader.h
extern int globalVar; // 只是声明,不是定义
// file1.cpp
#include "myheader.h"
int globalVar = 42; // 这是定义,分配存储空间
// file2.cpp
#include "myheader.h"
// 此处不需要再次定义 globalVar,因为头文件中已经声明了它的存在

场景一:

处于同一个文件中,C++中变量一般是先定义再使用,那如果想先使用,再定义呢?亦或者定义再后,使用在前,使用时没有访问权限呢?

就可以先编写代码,最后定义变量,最后在初始处 使用extern进行声明即可。显然这种用法多此一举,没有多大意义。

  • 举例如下:
#include<iostream>
using namespace std;
extern int a;
extern int b;
int gcd(int a, int b) {
	int c = 0;
	while (b != 0)
	{
		c = a % b;
		a = b;
		b = c;
	}
	return a;
}
int main() {
	cout << gcd(a, b) << endl;
	cout << "YES! PF!" << endl;
}

int a = 12;
int b = 18;

场景二:

在一个文件中定义一个全局变量,在另外一个文件中需要使用同一个 变量

  • 举例如下:
    在同一个目录文件下
    在这里插入图片描述

去除掉extern1中的extern可以看到:
在这里插入图片描述
可以顺利运行

去除掉extern2中的extern可以看到:
在这里插入图片描述
去除掉extern1和extern2中的extern可以看到:
在这里插入图片描述
总结:
当在一个文件中定义之后,另外一个文件使用的时候,需要加extern,如果不加会导致重复定义,报错!
所以在实际编码的时候,可以在定义变量的时候使用这个关键字,在使用的时候也加上这个关键字。

推荐使用格式:

  • 首先定义一个mod.h文件,用来声明其他文件需要访问的变量或者函数(使用extern修饰);
  • 定义一个cpp文件,包含mod.h,初始化mod.h文件中的变量或者函数实现;
  • 在使用的时候使用extern进行修饰,说明是访问外部其他变量。
    更多的时候是使用类的成员来替代。

重要的结论:
使用 extern 修饰的变量在链接的时候只找寻同名的标号,不检查类型,所以才会导致编译通过,运行时出错。

1、在其他文件中定义过的全局变量,在另一个文件中要调用时,只需在声明语句前加关键字extern。

 文件1,定义变量
int i= 1;
 文件2,声明变量

extern int i;

2、对于常量,要调用其他文件的常量时,做法如下:

 文件1,定义常量
extern const int i = 1;
文件2,声明常量
 extern const int i;

extern “C”

extern "C"的真实目的是实现类C和C++的混合编程,不做详细解释。

C/C++ extern关键字详解 在C/C++语言中,extern关键字用于声明一个变量或函数,表明其在其他地方定义。在上述代码中,myFunction函数内部使用extern关键字声明了一个全局变量globalVariable。然后在file2.cpp中定义了这个全局变量,并在main函数中使用extern关键字引用了该变量。然后在file2.cpp中定义了这个函数,并在main函数中使用extern关键字引用了该函数。在一个文件中使用extern关键字声明一个函数,可以在其他文件中引用该函数。// 在函数内部声明全局变量。 阅读详情

相关推荐

【C/C++实战篇】C语言外部变量extern 和 extern “C“用法详解,C++导入C函数

本文主要介绍了C/C++中extern关键字的用法。extern用于扩展变量和函数的可见性,使其能在不同源文件或同一文件的不同位置使用。对于变量,extern声明变量但不定义;对于函数,extern默认隐含声明。文章通过多个示例展示了extern的使用场景,包括跨文件引用全局变量、提前引用全局变量等。此外,还介绍了C++中extern "C"的用法,用于兼容C语言函数调用。关键点包括:声明可多次而定义只能一次,extern修饰变量时仅声明不分配内存,而初始化时则同时定义。最后说明了头文件

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 7837

C++ extern关键字

C++ extern关键字

Solititude的博客 923

从CAD到完美网格:HyperMesh几何清理全流程指南(2023最新版)

本文详细介绍了2023最新版HyperMesh在几何清理和网格划分方面的全流程操作指南。从CAD导入、几何修复到中面提取和网格生成,系统性地分享了实战验证的解决方案,帮助工程师高效处理复杂几何体,提升有限元模型质量。特别针对汽车和航空航天领域的常见问题,提供了智能化工具和优化技巧。

weixin_29306011的博客 224

C++ extern 关键字

对于“在a.cpp文件中使用在b.cpp中定义的函数”这种场景,大家应该非常熟悉。一般会通过在a.cpp中#include "b.h"来解决这个问题。在某些情况下,可能b.cpp文件并没有对应的b.h头文件,这时就需要在a.cpp中使用extern关键字声明b.cpp中的函数。// 声明Utils.cpp中定义的display函数 extern int g_num;// 声明Utils.cpp中定义的全局变量g_num int main() {return 0;

个人技术博客 1521

别再写前端了!用Gradio 3.x + HuggingFace Spaces,5分钟把你的Python算法变成网页应用

本文介绍如何利用Gradio 3.x和HuggingFace Spaces快速将Python算法转化为网页应用,无需前端开发经验。通过5行代码和简单的Git命令,即可实现专业级Web界面部署,大幅提升算法展示效率。特别适合算法工程师和数据科学家快速分享模型成果。

weixin_33443333的博客 331

抖音小程序开发 唤起收银台支付(可以选择支付宝APP支付或微信H5支付)

什么都别说,先看效果: 字节跳动也开放了小程序给商家接入,可以在旗下APP如抖音、今日头条、今日头条极速版等应用中即点即用,基于庞大的数亿用户量为其引流,帮助商家获取用户流量,销售商品,其模式和微信小程序差不多。 1、后台管理地址: https://developer.toutiao.com/ 2、开发文档地址: https://developer.toutiao.com/dev/cn/min...

悟空码字的博客 1万+

深入理解c++中.h/.cpp文件,extern关键字,typedef,using关键字

源文件是代码的“具体实现”。它包含了所有在头文件中声明的实体所对应的完整定义。源文件中应该包含什么?头文件的包含:#include "my_header.h",以获取所有声明。函数的完整定义类成员函数的完整实现全局变量的定义(这是该变量唯一被分配内存的地方)为什么要这么做?每个 .cpp 文件都被编译器单独编译成一个目标文件(.o 或 .obj)。这些目标文件包含了实际的机器码。

cyz322649的博客 1432

【调试记录】GT ip跑aurora 64b66b协议

如果不用,会出现这种情况:自回环测试,数据收发ok.一旦和对方通信,对方接收的就是一堆乱码,因为GT链路发送数据不能是全1或全0,或者长时间的1或0.否则线路容易受到干扰,毕竟线速率10多G,用了加扰和解扰,就可以提高抗干扰能力。64B66B编码,数据输入是64bit,输出是66bit,所以这之间存在着2bit的带宽差,Gearbox 就是用来解决这种差异的,实现方式是:将66bit数据拿出来2bit先存入Gearbox,然后输出64bit.发送同步码或控制数据时,配置成2.2.4 加扰和解扰!

weixin_41246509的博客 1601

C++中extern关键字使用

chapter 1 . extern关键字的作用     extern是一个关键字,它告诉编译器存在着一个变量或者一个函数,如果在当前编译语句的前面中没有找到相应的变量或者函数,也会在当前文件的后面或者其它文件中定义,来看下面的例子。     // extern.cpp : Defines the entry point for the console application. // #

sruru的专栏 9万+

【ISP图像处理】Demosaic去马赛克技术演进与边缘优化策略

本文深入解析了ISP图像处理中的Demosaic(去马赛克)技术。从Bayer阵列原理出发,梳理了从双线性插值、Hamilton-Adams边缘导向算法到利用通道相关性与自相似性的技术演进历程,并重点探讨了针对边缘与纹理伪影的优化策略,为工程实践中的算法选型与硬件协同设计提供了专业指导。

weixin_29091445的博客 387

程序员必备75道逻辑思维题(附答案)之二

逻辑训练 身为一个大数据工程师,平时的算法训练还是不能少的,今天给大家看几道我曾经看到的逻辑思维题觉得很好,想分享一下。 【6】一个球、一把长度大约是球的直径2/3长度的直尺.你怎样测出球的半径?方法很多,看看谁的比较巧妙 【7】五个大小相同的一元人民币硬币。要求两两相接触,应该怎么摆? 【8】猜牌问题 S先生、P先生、Q先生他们知道桌子的抽屉里有16张扑克牌:红桃A、Q、4 黑桃J、8、4、2、...

蛋蛋淡淡定的庄园 3547

c++ 中 extern关键字用法

extern一般是使用在多文件之间需要共享某些代码时。 一个c++程序可以包含多个文件,在一个文件中已定义的变量,如果要在另一个文件中调用,就要先声明一下变量,此时用extern这个关键字来声明。 区分是定义还是声明关键在于看计算机是否为变量分配了存储空间。 int num ; //这是定义 extern int num = 1; //这也是定义 extern in...

平凡的脚步也可以走完伟大的行程 1104

线结构光相机原理详解以及精度控制总结

摘要:线阵结构光相机是工业三维检测的核心设备,结合线阵相机的高分辨率与结构光的主动三维成像能力。其工作原理基于线激光投射、逐线扫描、亚像素级条纹提取及三角测量法实现三维重建。精度受硬件、校准、环境和算法四因素影响,需通过优化硬件选型(如小像元相机、窄线宽激光)、精准校准(相机内参、激光平面)、环境控制(遮光、隔振、恒温)及算法优化(Steger算法、点云后处理)来提升。典型应用(卷材、轨道检测)中深度精度可达5-20μm,需根据场景需求平衡参数配置。

start_up_go的博客 939

c++中extern关键字

extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 声明函数或全局变量的作用范围的关键字,其声明的函数和变量可以在本模块或者其他模块中使用,记住它是一个声明不是定义! 链接指定。当它与"C"一起连用时,如: extern "C" void fun(int a, int ...

you-know-who的博客 7664

FlashBootloader01-基于UDS的Flash Bootloader【架构篇】

文章目录1 Flash Bootloader的依赖项2 Flash Bootloader中使用的UDS的主要功能3 Flash Bootloader更新固件3.1 初始化MCU3.2 刷写流程 1 Flash Bootloader的依赖项 通常Flash Bootloader由以下四方面组成: UDS协议 上位机「编写Bootloader Sequence」 通信驱动(如CAN ) Flash Driver 2 Flash Bootloader中使用的UDS的主要功能 1. 10 02服务 客户端

3589

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C++中extern关键字

1. 序言extern是一个关键字,它告诉编译器程序中存在着一个变量或者一个函数,如果在当前编译语句的前面中没有找到相应的变量或者函数,也会在当前文件的后面或者其它文件中定义。因此,extern的功能主要为声明外部有一个可用的函数或者变量(通常,这些变量时在cpp或者c文件中定义的),而且这些变量和函数是全局可见的。2. 现代程序编译流程简要介绍在具体讲述extern之前,觉得十分有必要介绍下现代程

Time is a choice 6806

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C++关键字extern

本篇介绍C++语言中关键字extern。实现使多个脚本文件共享使用在某个脚本文件中已经定义声明的变量和函数。 ExternTest.cpp脚本文件 /* * Author:W * 关于extern关键字作用测试类 */ //引入头文件:头文件包含了程序中必需的或有用的信息 #include <iostream> //命名空间使用 using namespace std; //变量定义声明 int v1 = 5; //函数定义声明 void method() { cout <&l

成长ing中的w的专栏 288

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C++之extern关键字详解

在C语言中,修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。extern声明不是定义,即不分配存储空间。 先来看一段代码 /* basic_stdy.h */ #ifndef_BASIC_STDY_H_ #define_BASIC_STDY_H_ //extern int a; //在头文件中声明,必须加上extern,否则就是重定义 //void fun(); ...

居老师的博客 3694

C/C++关键字中的extern 和 static

extern 关键字的用法, 示例: 在tet.cpp中声明了一个变量,而想在main的主文件中使用这个变量,就可以使用extern关键字来找到这个变量。不需要包含 .h 的方法。 项目目录: tet.cppint a = 5; static int z = 7; void swap_b(int a, int b){ int temp; temp = a; a = b;

迎难而上 717

对于C++中的extern关键字用法的理解

今天在学习Effective C++时遇到了extern关键字,这个关键字我不熟悉,因此参考csdn上一位大佬的博客,总结出如下笔记: 一、首先,明确一点,即:extern是关于声明的关键字: 变量的声明有两种情况: 1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。 2、另一种是不需要建立存储空间的,通过使用extern关键字声明变量名而不定义它。 例如:extern int a 其中变量 a 可以在别的文件中定义的。 简单总结:除非有extern关键字,否则都.

weixin_44980842的博客 1628

C++extern关键字

extern在C++中,extern关键字用于声明一个变量或函数是在别的文件或本文件的其他位置定义的,从而可以在不同的翻译单元(通常指不同的源文件)之间共享变量或函数。

Yinrtyu_的博客 366

关于C++的extern关键字

一、extern关键字的作用 文件中定义的全局变量的可见性扩展到整个程序是在链接完成之后,而在编译阶段,他们的可见性仍局限于各自的文件。 编译器的目光不够长远,编译器没有能够意识到,某个变量符号虽然不是本文件定义的,但是它可能是在其它的文件中定义的。 虽然编译器不够远见,但是我们可以给它提示,帮助它来解决上面出现的问题。这就是extern的作用了。 ex...

anhuang5101的博客 190

Clion编译多个cpp文件的extern关键字

3.在CMakeLists.txt文件中add_executable()语句中添加要链接的file2.cpp,并重新加载。4.重新运行,程序输出变量a,b的值,大功告成!

qq_42416602的博客 682
上一篇: 【SLAM轨迹误差】rpg_trajectory_evaluation
下一篇: 空间曲线的参数方程
人间小客
博客等级 码龄8年 253粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值