C语言中的extern:全局变量和函数的声明与使用

概念:

在C语言中,extern是一个关键字,用于声明全局变量和函数。它告诉编译器该变量或函数在其他源文件中定义,让编译器知道在链接时需要从其他源文件中寻找其定义。extern关键字不会分配内存,只是告诉编译器该变量或函数存在于其他源文件中。

全局变量的声明:

在某个源文件中声明全局变量时,如果需要在其他源文件中使用它,我们需要在其他源文件中使用extern关键字进行声明,以便编译器知道该变量的存在。

示例:

在file1.c文件中声明全局变量num:

int num; // 全局变量声明

在file2.c文件中使用file1.c文件中声明的全局变量num:

extern int num; // 使用extern关键字进行声明

函数的声明和使用:

在某个源文件中声明函数时,如果需要在其他源文件中调用该函数,我们需要在其他源文件中使用extern关键字进行声明,以便编译器知道该函数的存在。

示例:

在file1.c文件中声明函数add:

int add(int a, int b); // 函数声明

在file2.c文件中使用file1.c文件中声明的函数add:

extern int add(int a, int b); // 使用extern关键字进行声明

int main() {

int result = add(2, 3); // 调用外部定义的函数

...

}

注意事项:

extern关键字只能用于全局变量和函数的声明,不能用于局部变量。

声明一个全局变量或函数时,如果不加extern关键字,则默认为extern。

如果一个全局变量或函数在某个源文件中定义,而在其他源文件中使用时,需要在使用它的源文件中进行声明,以便编译器知道该变量或函数的存在。

使用extern关键字声明的变量或函数,需要保证其在链接时是可见的,即在链接阶段能够找到其定义。

使用场景:

extern关键字主要用于多个源文件间共享全局变量和函数的情况。当我们需要在多个源文件中使用同一个全局变量或函数时,可以在其中一个源文件中定义它,然后在其他源文件中使用extern关键字进行声明,从而在编译和链接过程中正确地引用和使用它。

总结:

extern是C语言中的一个关键字,用于声明全局变量和函数。它告诉编译器该变量或函数在其他源文件中定义,以便在链接时从其他源文件中寻找其定义。我们可以使用extern关键字在一个源文件中声明全局变量和函数,从而在其他源文件中使用它们。通过合理使用extern关键字,我们可以实现在不同源文件间共享全局变量和函数的目的。

 

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

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

相关文章

归并排序-逆序对

之前的文章里有写归并排序的最小和问题(归并排序-最小和-CSDN博客),逆序对问题其实跟最小和问题的本质一样: 逆序对:给定一个数据,从左往右,从第一个数开始,它右边每一个比它小的都…

解密:消息中间件的选择与使用:打造高效通信枢纽

目录 第一章:消息中间件介绍 1.1 什么是消息中间件 1.2 消息中间件的作用 1.3 消息中间件的分类 第二章:消息中间件的选择标准 2.1 性能 2.2 可靠性 2.3 可扩展性 2.4 易用性 2.5 社区支持 2.6 成本 第三章:常见的消息中间件对比…

解决 [Vue warn]:Avoid mutating a prop directly 警告

错误信息 [Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop’s value. Prop being mutated: “xxx” 错误原因 所有的 prop 都使得…

图像分割的作用以及运用领域

图像分割 图像分割是数字图像处理领域的一种技术,其主要目的是将数字图像划分成多个部分或区域,以便于更简单、有效地分析和理解图像内容。在图像分割过程中,图像被分解成若干互不重叠的区域,这些区域通常对应于实际场景中的各种…

推荐几款AI绘图软件且提供psd源文件

AI绘图软件通常指的是支持人工智能辅助创作的绘图和设计工具,能够帮助用户更高效地进行图像、插画和设计工作。以下是一些具有AI功能且可以导出或处理PSD格式文件(即Photoshop源文件格式)的软件: Adobe Photoshop Adobe Photoshop…

Prometheus配置与管理

1 配置文件 Prometheus通过命令行和配置文件进行配置,命令行配置不能修改的系统参数(例如存储位置,要保留在磁盘和内存中的数据量等),但配置文件定义了与抓取作业及其实例相关的所有内容,以及哪些规则文件…

2024阿里云优惠,云服务器61元一年起

2024年最新阿里云主机价格,最低配置2核2G3M起步,只要61元一年,还可以在阿里云CLUB中心领券 aliyun.club 专用满减优惠券。 1、云服务器ECS经济型e实例2核2G、3M固定带宽99元一年 2、轻量应用服务器2核2G3M带宽轻量服务器一年61元 3、阿里云轻…

ECMAScript日常总结--ES2019(ES10)

ECMAScript日常总结–ES2019(ES10) 文章目录 ECMAScript日常总结--ES2019(ES10)1. Object.fromEntries() -- 将键值对的列表转换为对象2. Array.prototype.flat() -- 用于将嵌套数组(多维数组)扁平化为一维数组3. String.prototype.trimStart() 和 Strin…

蓝桥杯备战——3.定时器前后台

1.STC15F2k61S2的定时器 阅读STC15系列的手册,我们可以看到跟STC89C52RC的定时器还是有不同之处的: 由上图可以看到我们可以通过AUXR寄存器直接设置定时器的1T/12T模式了 在定时器0/1模式上也可以设置为16位自动重装载。 另外需要注意IAP15F2K61S2只有…

使用 SpringBoot 读取 YAML 文件并将数据转为 Map,在嵌套 Map 中递归获取指定层级下的所有数据

文章目录 引入认识 YAML 格式规范定义脱敏规则格式主要逻辑实现优化方法完整工具类 引入 在项目中遇到一个需求,需要对交易接口返回结果中的指定字段进行脱敏操作,但又不能使用AOP注解的形式,于是决定使用一种比较笨的方法: 首先…

nvm安装的node,脚手架安装 vue 项目时报错

npm install -g vue/cli 时报错 解决办法 //修改npm的资源镜像: npm config set registry http://registry.npm.taobao.org重新脚手架安装 npm install -g vue/cli成功到下一步,当执行:vue create my-vue-demo时又报新的错 原因:【HTTPS …

part2. jdk9/10/11/12/16新特性详解

1.jdk9 1.1 模块化机制 定义模块:module-info.java module com.newfeature.test {requires java.se;requires lombok;requires junit; }package com.newfeature.test;import java.lang.reflect.Field;public class Main {public static void main(String[] args) …

mysql字符集

一、查看字符集 //查看数据库字符集 SHOW CREATE DATABASE database; //查看表字符集 SHOW CREATE DATABASE table; //查看指定表全部字段字符集 show full columns from table; 二、修改字符集 将超出utf8字符集范围的字符比如𪨧插入到utf8字符集的字段上会…

Element UI样式修改之NavMenu导航菜单箭头样式修改

UI设计稿给的菜单箭头样式可能与我们饿了么组件NavMenu的菜单箭头样式不一致,目前我们侧边导航菜单的上下翻转箭头如下所示: 希望得到如下的结果: 找到饿了么Icon里我们想要向下箭头,F12后复制content内容content: “\e790”; content: "\e790";然后将默认的c…

C语言基本概念

目录 2.1 编写一个简单的C程序 2.1.1 编译和链接 2.1.2 集成开发环境 2.2 简单程序的一般形式 2.2.1 指令 2.2.2 函数 2.2.3 语句 2.3 注释 2.4 变量和赋值 2.4.1 类型 2.4.2 声明 2.4.3 赋值 2.4.4 显示变量的值 2.4.5 初始化 2.4.6 显示表达式的值 2.5 读入…

网络通信(15)-C#TCP客户端掉线重连实例

本文上接前面的文章使用Socket在C#语言环境下完成TCP客户端的掉线重连实例。 掉线重连需要使用心跳包发送测试网络的状态,进而进入重连循环线程。 前面实例完成的功能: 客户端与服务器连接,实现实时刷新状态。 客户端接收服务器的数据。 客户端发送给服务器的数据。 客…

pytorch代码实现注意力机制之MLCA

MLCA注意力机制 简要:注意力机制是计算机视觉中使用最广泛的组件之一,可以帮助神经网络强调重要元素并抑制不相关的元素。然而,绝大多数信道注意力机制仅包含信道特征信息而忽略了空间特征信息,导致模型表示效果或目标检测性能较…

docker之部署青龙面板

青龙面板是一个用于管理和监控 Linux 服务器的工具,具有定时运行脚本任务的功能。在实际情况下也可以用于一些定期自动签到等任务脚本的运行。 本次记录下简单的安装与使用,请提前安装好docker,参考之前的文章。 一、安装部署 1、拉取镜像 # …

weak_ptr 与 一个难发现的错误(循环依赖问题)笔记

推荐B站视频:7.weak_ptr与一个非常难发现的错误_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV18B4y187uL/?p7&spm_id_frompageDriver&vd_sourcea934d7fc6f47698a29dac90a922ba5a3一、weak_ptr weak_ptr并不拥有所有权并不能调用 -> 和 解引…

ACL--访问控制列表概述、组成、分类、应用

目录 一、ACL概述 二、ACL的组成 三、ACL分类 四、举例说明 1、基于标准ACL和基础的高级ACL应用 2、基于端口的ACL 一、ACL概述 访问控制列表ACL(Access Control List)是由一条或多条规则组成的集合。所谓规则,是指描述报文匹配条件的…