c语言extern关键字

extern 是C和C++中的关键字,用于声明一个变量或函数的存在,但不进行定义。

它通常用于在一个源文件中引用另一个源文件中定义的变量或函数。 例如,extern int x; 表示 x 是一个整数变量,但它的实际定义将在其他文件中。在引用它的文件中,编译器会在链接阶段查找 x 的定义。 在函数声明中使用 extern 也是合法的,例如 extern void myFunction(); 表示 myFunction 是一个函数,但它的实际定义将在其他文件中。 总体而言,extern 的主要作用是告诉编译器某个变量或函数的定义存在,但是不在当前文件中。

当你在一个源文件中声明了一个变量或函数为 extern,而其定义在另一个源文件中时,这就是 extern 的典型用法。以下是一个示例: 假设你有两个源文件:file1.cfile2.c

file1.c

// file1.c
#include <stdio.h>
// 声明变量 x 为外部变量
extern int x;
int main() {// 输出外部变量 x 的值printf("The value of x is: %d\\\\n", x);return 0;
}

file2.c

// file2.c
// 定义外部变量 x
int x = 42;

在这个例子中,file1.c 中通过 extern int x; 声明了变量 x 的存在,但是并没有对它进行定义。然后,在 file2.c 中定义了变量 x 的值为 42。在编译时,编译器会将这两个文件编译成目标文件,然后链接器会将它们合并在一起。最终,运行 file1 可执行文件时,会输出 The value of x is: 42

当你需要在不同的源文件中共享变量或函数时,extern 是一个很有用的工具。例如,如果你有一个全局变量需要在多个文件中访问,可以在其中一个文件中定义该变量,然后在其他文件中使用 extern 来声明该变量的存在。这样,所有文件都可以访问和使用这个全局变量,而不需要在每个文件中都定义一次。

另外,extern 也可以用于在一个源文件中引用另一个源文件中定义的函数。例如,如果你有一个函数定义在另一个文件中,但是需要在当前文件中调用该函数,可以使用 extern 来声明该函数的存在,使得编译器能够正确地解析函数调用。

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

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

相关文章

StarRocks——Stream Load 事务接口实现原理

目录 前言 一、StarRocks 数据导入 二、StarRocks 事务写入原理 三、InLong 实时写入StarRocks原理 3.1 InLong概述 3.2 基本原理 3.3 详细流程 3.3.1 任务写入数据 3.3.2 任务保存检查点 3.3.3 任务如何确认保存点成功 3.3.4 任务如何初始化 3.4 Exactly Once 保证…

Leetcode - 周赛386

目录 一&#xff0c;3046. 分割数组 二&#xff0c;3047. 求交集区域内的最大正方形面积 三&#xff0c;3048. 标记所有下标的最早秒数 I 四&#xff0c;3049. 标记所有下标的最早秒数 II 一&#xff0c;3046. 分割数组 将题目给的数组nums分成两个数组&#xff0c;且这两个…

探索RedisJSON:将JSON数据力量带入Redis世界

探索RedisJSON&#xff1a;将JSON数据力量带入Redis世界 当我们谈论数据存储和查询时&#xff0c;Redis和JSON都是无法忽视的重要角色。Redis以其高效的键值存储、快速的读/写速度、以及丰富的数据结构赢得了开发者的喜爱。而JSON&#xff0c;作为一种轻量级的数据交换格式&am…

「Vue3系列」Vue3 条件语句/循环语句

文章目录 一、Vue3 条件语句1. v-if2. v-else-if 和 v-else3. v-show4. 使用计算属性进行条件渲染5. v-if与v-show比较v-ifv-show性能考虑使用场景 二、Vue3 循环语句1. 遍历数组2. 遍历对象3. 使用索引4. 注意事项 三、相关链接 一、Vue3 条件语句 在 Vue 3 中&#xff0c;你…

盲人出行:科技创造美好的未来

在繁忙的都市中&#xff0c;我每天都要面对许多挑战&#xff0c;盲人出行安全保障一直难以得到落实。我看不见这个世界&#xff0c;只能依靠触觉和听觉来感知周围的一切。然而&#xff0c;我从未放弃过对生活的热爱和对未来的憧憬。在一次机缘巧合下&#xff0c;我认识了一款名…

C3_W2_Collaborative_RecSys_Assignment_吴恩达_中英_Pytorch

Practice lab: Collaborative Filtering Recommender Systems(实践实验室:协同过滤推荐系统) In this exercise, you will implement collaborative filtering to build a recommender system for movies. 在本次实验中&#xff0c;你将实现协同过滤来构建一个电影推荐系统。 …

VLAN实验报告

实验要求&#xff1a; 实验参考图&#xff1a; 实验过程&#xff1a; r1: [r1]int g 0/0/0.1 [r1-GigabitEthernet0/0/0.1]ip address 192.168.1.1 24 [r1-GigabitEthernet0/0/0.1]dot1q termination vid 2 [r1-GigabitEthernet0/0/0.1]arp broadcast enable [r1]int g 0/0/…

Mysql学习之MVCC解决读写问题

多版本并发控制 什么是MVCC MVCC &#xff08;Multiversion Concurrency Control&#xff09;多版本并发控制。顾名思义&#xff0c;MVCC是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之&#xff0…

django的模板渲染中的【高级定制】:按数据下标id来提取数据

需求&#xff1a; 1&#xff1a;在一个页面中显示一张数据表的数据 2&#xff1a;不能使用遍历的方式 3&#xff1a;页面中的数据允许通过admin后台来进行修改 4&#xff1a;把一张数据表的某些内容渲染到[xxx.html]页面 5&#xff1a;如公司的新商品页面&#xff0c;已有固定的…

《梦幻西游》本人收集的34个单机版游戏,有详细的视频架设教程,值得收藏

梦幻西游这款游戏&#xff0c;很多人玩&#xff0c;喜欢研究的赶快下载吧。精心收集的34个版本。不容易啊。里面有详细的视频架设教程&#xff0c;可以外网呢。 《梦幻西游》本人收集的34个单机版游戏&#xff0c;有详细的视频架设教程&#xff0c;值得收藏 下载地址&#xff1…

FDM打印机学习

以下内容摘自网络&#xff0c;仅供学习讨论&#xff0c;侵删。 持续更新。。。 FDM打印机是通过喷头融化丝状耗材&#xff08;PLA&#xff0c;ABS等材料&#xff09;&#xff0c;然后逐层涂在热床上&#xff0c;一层一层逐级抬高。 结构分类 Prusa i3型是一种龙门结构&#…

JavaWeb 下拉菜单怎么实现选择不同的颜色?

在JavaWeb中实现下拉菜单选择不同颜色的功能是一种常见的需求&#xff0c;可以通过HTML、CSS和JavaScript结合Java后端来实现。 第一步&#xff1a;编写HTML页面 首先&#xff0c;我们需要创建一个HTML页面&#xff0c;其中包含一个下拉菜单和一个用于显示颜色的区域。 <…

python 爬取文本内容并写入json文件

背景: 项目需要从html 提取说明书目录 实现: 由于html是包含所有内容,所以将其中目录部分手动重新生成一个html 文件dir26.html python import requests from bs4 import BeautifulSoup import jsonfilename "dir26.html" # 替换为实际的文件路径 with open(fil…

ES 备份索引

1、先创建索引 PUT file_info_sps_demo1 {"settings": {"index": {"number_of_shards": "1","blocks": {"read_only_allow_delete": "true"},"max_result_window": "500000",&quo…

阶跃信号与冲击信号

奇异信号&#xff1a;信号与系统分析中&#xff0c;经常遇到函数本身有不连续点&#xff08;跳变电&#xff09;或其导函数与积分有不连续点的情况&#xff0c;这类函数称为奇异函数或奇异信号&#xff0c;也称之为突变信号。以下为一些常见奇异函数。 奇异信号 单位斜变信号 …

C#双向链表实现:Append()方法追加并显示数据

目录 一、涉及到的知识点 1.定义 2.双向链表与单向链表的区别 二、实例 一、涉及到的知识点 1.定义 在双向链表中&#xff0c;每个节点有两个指针域&#xff0c;一个指向它的前一个节点&#xff08;即直接前驱&#xff09;&#xff0c;另一个指向它的后一个节点&#xff0…

Ubuntu18.04安装RTX2060显卡驱动+CUDA+cuDNN

Ubuntu18.04安装RTX2060显卡驱动CUDAcuDNN 1 安装RTX2060显卡驱动1.1 查看当前显卡是否被识别1.2 安装驱动依赖1.3 安装桌面显示管理器1.4 下载显卡驱动1.5 禁用nouveau1.6 安装驱动1.7 查看驱动安装情况 2 安装CUDA2.1 查看当前显卡支持的CUDA版本2.2 下载CUDA Toolkit2.3 安装…

车灯修复UV胶的优缺点有哪些?

车灯修复UV胶的优点如下&#xff1a; 优点&#xff1a; 快速固化&#xff1a;通过紫外光照射&#xff0c;UV胶可以在5-15秒内迅速固化&#xff0c;提高了修复效率。高度透明&#xff1a;固化后透光率高&#xff0c;几乎与原始车灯材料无法区分&#xff0c;修复后车灯外观更加…

对缓冲区的初步认识——制作进度条小程序

对缓冲区的初步认识--进度条小程序 前言预备知识回车和换行的区别输出缓冲区/n 有清空输出缓冲区的作用stdout是什么&#xff1f;验证一切皆文件为什么是\n行刷新&#xff1f; 倒计时程序原理 代码实现为什么这里要强制刷新&#xff1f;没有会怎样&#xff1f;为什么是输出的是…

RabbitMQ安装及使用

系列文章目录 文章目录 系列文章目录前言一、下载二、安装三、插件安装四、配置五、权限六、集群模式 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&…