C语言-外部关键字extern

news2025/1/1 12:04:57

extern 关键字

 extern 用在全局变量或函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用。

 什么是定义,什么是声明?
      什么是定义:所谓的定义就是为这个变量分配一块内存并给它取上一个名字,这个名字就是我们经常所说的变量名。但注意,这个名字一旦和这块内存匹配起来,它们就同生共死,终生不离不弃,并且这块内存的位置也不能被改变。一个变量在一定的区域内(比如函数内,全局等)只能被定义一次,如果定义多次,编译器会提示你重复定义同一个变量或对象。
什么是声明: 有两重含义,如下:
第一重含义: 告诉编译器,这个名字已经匹配到一块内存上了。
第二重含义: 告诉编译器,我这个名字我先预定了,别的地方再也不能用它来作为变量名。记住,定义和声明最重要的区别: 定义创建了对象并为这个对象一块内存,而声明的时候是没有分配内存空间的。

声明是不开辟内存的,定义是开辟内存的

 

外部变量(全局变量)extern----全局静态存储区

标准定义格式:extern 类型名 变量名;

extern int i; //是声明,不是定义,没有分配内存
int i; //是定义

 示例1:

extern 可以声明一个变量,使得该变量是来自其他文件的变量在本文件可以被访问。

比如:创建两个文件 test.c 和 main.c文件;
在test.c文件中定义一个全局变量:

//test.c
int i = 20; //定义一个全局变量

在main.c文件,声明变量 i;

main.c文件
# include<stdio.h>
extern int i; //声明变量i,当编译链接时候,main.c文件就可以访问到test.c文件的i的值了;
int main()
{
	printf("%d",i);
	return 0;
}

这样我们就可以跨文件(test.c),在本文件(main.c)访问这个变量了;

 示例2:

示例三:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/602757.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《多传感器融合感知》一、构建自动驾驶多传感器系统

来自 &#xff1a; https://www.bilibili.com/video/BV1JY4y1R7Be/ 多传感器融合的需求多传感器硬件系统构建多传感器硬件系统的时序闭环 1. 多传感器融合的需求 自动驾驶用来解决的问题&#xff1a; 建图定位、感知问题&#xff08;路上有什么、堵不堵、好不好走…&#xff…

数据可视化系列指南之分布类图表大全

导语 随着数据在各行业中的应用越来越广泛&#xff0c;大家也逐渐认识到数据可视化在企业生产经营中的重要作用&#xff0c;在数据可视化过程中&#xff0c;图表是处理数据的重要组成部分&#xff0c;因为它们是一种将大量数据压缩为易于理解的格式的方法。数据可视化可以让受…

生态系统服务评估方法 | 人类活动影响、重大工程实施的生态成效评估(InVEST模型)

以InVEST模型结合实际项目进行由浅入深的实战技术&#xff0c;针对特点及需求进行分析&#xff0c;融合课程体系&#xff0c;对接工作实际项目及论文写作&#xff0c;解决参会者关注的重点及实际项目过程问题&#xff0c;采取逐步延伸的逻辑&#xff0c;不论您是小白亦或是已经…

数据库磁盘文件格式的设计原理内幕

引言 访问磁盘需通过系统调用来实现&#xff0c;因此通常我们需要指定目标文件的偏移量&#xff0c;然后把数据从磁盘上的形式解析成合适主存的形式。这意味着要想设计一个高效的磁盘数据结构&#xff0c;必须构造一种易于修改和解析的文件格式。在本文中&#xff0c;我们将讨论…

unicms 使用thinkphp8 重构版

unicms 有你存在 一切安好 2023年6月使用thinkphp8&#xff0c;重构了cms。php最低使用php8版。参考了多个cms结合10年的开发经验&#xff0c;打造了开箱机用&#xff0c;简单的cms系统。当然由于你能力和开发时间限制&#xff0c;肯定有bug。欢迎大家指正。我也会不定期的修改…

【线性规划模型】

线性规划模型&#xff1a;原理介绍和预测应用 引言 线性规划是运筹学中一种重要的数学优化方法&#xff0c;被广泛应用于各个领域&#xff0c;包括工业、经济、物流等。 线性规划模型的原理 线性规划模型的目标是在一组线性约束条件下&#xff0c;寻找一组变量的最优解&…

Emm_V4.2步进闭环驱动器说明书Rev1.1

一、产品介绍 1.1 产品简介&#xff1a; Emm42_V4.x步进闭环驱动器是张大头智控为满足广大用户需求而自主研发的一款稳定可靠的产品&#xff0c;它是基于上一代Emm42_V3.6版本升级而来&#xff0c;不仅延续了其优秀的FOC矢量闭环控制算法&#xff0c;更在其传统的Dir/Step控制模…

Java003——编写和运行第一个Java程序HelloWorld

一、使用记事本创建Java并运行 1.1、设置文件显示后缀名 目的是为了方便查看文件类型 1.2、创建一个HelloWorld.java文件 java程序文件都是以.java后缀结尾的 1.3、编写Java程序 编写一下程序&#xff0c;并保存 public class HelloWorld {public static void main(Strin…

100天精通Golang(基础入门篇)——第0天: 安装 Go 语言开发环境的基础教程,带你学习Golang之Hello Go !

文章目录 1. 下载 Go 语言的安装包&#xff1a;1. 安装 Go 编译器&#xff1a;- 双击 安装下一步:切换安装路径:下一步:安装等待安装完成安装完成 - 2. 测试安装是否成功&#xff1a;1. 开始学习 Go 语言&#xff1a;1. 创建项目2. 创建 类文件3. 输入类名4. 键入 下方代码块5.…

【C语言】让你不再害怕“指针”【c】【知识点整理】

目录 一.什么是指针&&为什么需要指针&#xff1f; 1.什么是指针&#xff1f; 2.为什么需要指针&#xff1f; 以一个代码为例观察地址&#xff1a;&#xff08;这里我们可以通过调试和打印两种方式观察&#xff09; 1.调试观察&#xff1a; 2.打印观察&#xff08;…

Vue.js 中的 v-if 和 v-show 有什么区别?

Vue.js 中的 v-if 和 v-show 有什么区别&#xff1f; 在 Vue.js 中&#xff0c;v-if 和 v-show 都是用来控制元素的显示和隐藏的指令。但是&#xff0c;它们之间有一些区别。本文将深入探讨 v-if 和 v-show 的区别&#xff0c;并给出一些相关的代码示例。 v-if v-if 是一种条…

python数据分析模块

python数据分析模块 Python与数据分析的关系数据分析常用模块Python数据分析常用类库1&#xff0e;数组计算的数学模块-Numpy2&#xff0e;Pandas——数据分析核心库3&#xff0e;Matplotlib——绘制数据图表的 Python 库4&#xff0e;批量处理Excel文件的模块-xlwings5&#x…

浮点型在内存中的存储,与整型存储方式竟然不同

对于整形的存储方式&#xff0c;大家可以看我的上一篇文章&#xff0c;这篇文章来介绍浮点型在内存中存储方式。 目录 1. 问题 2. 浮点型家族&#xff1a; 3. 存储方式: 4. 读取方式&#xff1a; 5. 解题 1. 问题 我们先来看一段代码&#xff1a; #include <stdio.h&…

人体姿态估计

预测人体关键点有什么作用&#xff1f; 还原人体姿态&#xff0c;输出脸部、手部的关键点坐标3D空间内&#xff0c;关键点变为3维坐标&#xff0c;可以在三维空间中还原人体姿态&#xff0c;可以实现一键换装恢复3D的人体模型实现下游任务–行为理解&#xff0c;根据姿态判断人…

rocketmq-client-go注册消费者组的问题

一、前言 test环境服务启动&#xff0c;通过代码新注册一个customer group进行消费&#xff0c;服务一直报错如下&#xff1a; levelerror msg"fetch offset of mq from broker error" MessageQueue"MessageQueue [topicxxx, brokerNamebroker-a, queueId1]&q…

字节跳动面试挂在2面,复盘后,决定二战.....

先说下我基本情况&#xff0c;本科不是计算机专业&#xff0c;现在是学通信&#xff0c;然后做图像处理&#xff0c;可能面试官看我不是科班出身没有问太多计算机相关的问题&#xff0c;因为第一次找工作&#xff0c;字节的游戏专场又是最早开始的&#xff0c;就投递了&#xf…

人体关键点检测

title: 人体关键点检测 date: 2023-06-02 21:28:46 tags: [MMPose,cv] 人体关键点检测 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9x4nhwLf-1685714024668)(https://fastly.jsdelivr.net/gh/weijia99/blog_imagemain/1685712470039%E4%BA%BA%E4…

【stm32开发】stm32+oled最小系统板资料(原理图、PCB、示例代码)【六一】

&#x1f389;欢迎来到stm32专栏~stm32oled最小系统板 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;stm32专栏 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家能…

深度学习训练营之J5周DenseNet+SE-Net实战

深度学习训练营之J5周DenseNetSE-Net实战 原文链接方法介绍SE模块应用分析SE模块的效果对比SE模块代码实现SE模块在DenseNet当中的应用参考内容 原文链接 &#x1f4cc;第J5周&#xff1a;DenseNetSE-Net实战&#x1f4cc; &#x1f368; 本文为&#x1f517;365天深度学习训练…

UART帧格式介绍

UART及通信方式简介 UART Universal Asynchronous Receiver Transmitter 即通用异步收发器&#xff0c;是一种通用的串行、异步通信总线 &#xff0c;该总线有两条数据线&#xff0c;可以实现全双工的发送和接收&#xff0c;在嵌入式系统中常用于主机与辅助设备之间的通信…