C语言中,“extern”关键字的含义与用法

在这里插入图片描述
在C语言中,extern 关键字用于声明一个已经在其他地方定义的变量或函数。它的主要作用是告诉编译器,某个变量或函数是在当前文件之外定义的,编译器应该在链接阶段找到这个变量或函数的实际定义。以下是 extern 的一些常见用途和用法:

1. 声明全局变量

当你在一个文件中定义了一个全局变量,并希望在另一个文件中使用这个变量时,可以在第二个文件中使用 extern 关键字来声明这个变量。

文件1: file1.c
// 定义一个全局变量
int globalVar = 10;
文件2: file2.c
#include <stdio.h>// 使用 extern 声明 file1.c 中定义的全局变量
extern int globalVar;void printGlobalVar() {printf("globalVar = %d\n", globalVar);
}

2. 声明函数

如果你在一个文件中定义了一个函数,并希望在另一个文件中调用这个函数,可以在第二个文件中使用 extern 关键字来声明这个函数。不过,通常情况下,函数的声明已经包含在头文件中,所以直接包含头文件即可。

文件1: file1.c
// 定义一个函数
void myFunction() {// 函数实现
}
文件2: file2.c
#include <stdio.h>// 使用 extern 声明 file1.c 中定义的函数
extern void myFunction();int main() {myFunction();return 0;
}

3. 在头文件中声明

为了更好地组织代码,通常会在头文件中声明全局变量和函数,然后在多个源文件中包含这个头文件。

头文件: common.h
#ifndef COMMON_H
#define COMMON_H// 声明全局变量
extern int globalVar;// 声明函数
void myFunction();#endif // COMMON_H
文件1: file1.c
#include "common.h"// 定义全局变量
int globalVar = 10;// 定义函数
void myFunction() {// 函数实现
}
文件2: file2.c
#include <stdio.h>
#include "common.h"int main() {myFunction();printf("globalVar = %d\n", globalVar);return 0;
}

总结

  • extern 关键字用于声明已经在其他地方定义的变量或函数。
  • 对于全局变量,使用 extern 可以在多个文件之间共享同一个变量。
  • 对于函数,虽然通常不需要显式使用 extern,但在某些情况下(如静态链接库)可能需要使用 extern 来声明函数。

通过合理使用 extern,可以有效地管理和组织大型项目的代码。

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

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

相关文章

TCP最后一次握⼿连接阶段,如果ACK包丢失会怎样?

2024年10月NJSD技术盛典暨第十届NJSD软件开发者大会、第八届IAS互联网架构大会在南京召开。百度文心快码总经理臧志分享了《AI原生研发新范式的实践与思考》&#xff0c;探讨了大模型赋能下的研发变革及如何在公司和行业中落地&#xff0c;AI原生研发新范式的内涵和推动经验。 …

【大数据学习 | HBASE】hbase的读数据流程与hbase读取数据

1. hbase的读数据流程 在解析读取流程之前我们还需要知道两个功能性的组件和HFIle的格式信息 HFILE 存储在hdfs中的hbase文件&#xff0c;这个文件中会存在hbase中的数据以kv类型显示&#xff0c;同时还会存在hbase的元数据信息&#xff0c;包括整个hfile文件的索引大小&…

AI基础知识

目录 1.激活函数:one: 激活函数的作用:two: sigmoid函数:three: tanh函数:four: ReLu:five: Leaky ReLU 2.Softmax函数3.优化器:one: 优化器的作用:two: BGD&#xff08;批梯度下降&#xff09;:three: SGD&#xff08;随机梯度下降&#xff09;:four: MBGD&#xff08;Mini Ba…

01背包问题(DP)

2. 01背包问题 - AcWing题库 DP做题思路分析 实现代码&#xff1a; #include <iostream> #include <algorithm>using namespace std;const int N 1010;int n , m; int v[N],w[N],dp[N][N];int main() {cin >> n >> m;for (int i 1;i < n;i) {ci…

如何提升自媒体发稿效果,必须掌握的几个技巧

在自媒体时代&#xff0c;发稿效果直接关系到内容的传播力与影响力。为了提升自媒体发稿效果&#xff0c;有几个关键技巧是每位自媒体人必须掌握的。以下是对这些技巧的详细阐述&#xff1a; 一、明确受众定位 首先&#xff0c;自媒体人需要明确自己的受众群体。这包括受众的…

充电桩基础设施的时空大数据分析:以深圳市为例

随着全球对可持续交通解决方案的需求不断增长&#xff0c;电动汽车&#xff08;EV&#xff09;作为减少交通领域碳排放的重要手段&#xff0c;受到了广泛的关注。然而&#xff0c;电动汽车的普及和发展面临着诸多挑战&#xff0c;其中充电基础设施的建设和管理尤为关键。为了更…

将数组中的数据反向输出(数组,函数)

将数组中的数据反向输出&#xff0c;用数组名作函数参数 swap函数是用来实现数组中元素前后的调换&#xff0c;用这种方式来实现数组中元素的逆序输出 #include <stdio.h> #include <stdlib.h> void swap(int m[],int n); int main() {int a[]{1,2,3,4,5,6,7,8,9,…

【Matlab算法】MATLAB实现基于小波变换的信号去噪(附MATLAB完整代码)

MATLAB实现基于小波变换的信号去噪 结果图前言正文1. 小波变换理论基础1.1 小波变换的数学模型1.2 离散小波变换原理2. 信号去噪方法2.1 去噪算法流程2.2 阈值处理方法3. 核心函数解析3.1 wavedec函数3.2 wthresh函数代码实现4.1 信号生成4.2 小波变换去噪完整代码总结参考文献…

01-JavaSE课程总体介绍

适合人群 课程体系 学完本阶段&#xff0c;至少得到以下收货 学习内容&#xff08;视频课件源码&#xff09; 资料领取 JavaSE课程 更多资料获取&#xff0c;请联系星主

Linux( 权限+特殊权限 图片+大白话)

后面也会持续更新&#xff0c;学到新东西会在其中补充。 建议按顺序食用&#xff0c;欢迎批评或者交流&#xff01; 缺什么东西欢迎评论&#xff01;我都会及时修改的&#xff01; 在这里真的很感谢这位老师的教学视频让迷茫的我找到了很好的学习视频 王晓春老师的个人空间…

【Python】python商品营销策略数据分析可视化(源码+数据+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

Python 爬虫运行状态监控:进度、错误与完成情况

Python 爬虫运行状态监控&#xff1a;进度、错误与完成情况 在进行大规模数据爬取时&#xff0c;监控爬虫的运行状态至关重要。通过实时监控&#xff0c;可以了解爬虫的工作进度、出现的错误以及任务完成情况。这样可以及时发现并解决问题&#xff0c;确保数据抓取任务顺利进行…

内核tracepoint的注册回调及添加的方法

一、背景 内核开发时往往需要做一些内核态函数的监测或者内核状态的监测&#xff0c;就需要用一些调试手段来观测。常用的内核态的观测如kprobe和tracepoint&#xff0c;但是kprobe往往受制于一些系统的限制&#xff0c;很多系统并没有打开kprobe选项&#xff0c;这样我们不能…

全网最详细的自动化测试(Jenkins 篇)

学习 Jenkins 自动化测试的系列文章 Robot Framework 概念Robot Framework 安装Pycharm Robot Framework 环境搭建Robot Framework 介绍Jenkins 自动化测试 1. Robot Framework 概念 Robot Framework是一个基于Python的&#xff0c;可扩展的关键字驱动的自动化测试框架。 …

区块链技术在知识产权保护中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 区块链技术在知识产权保护中的应用 区块链技术在知识产权保护中的应用 区块链技术在知识产权保护中的应用 引言 区块链技术概述 …

项目管理中不可或缺的能力

在现代企业中&#xff0c;项目管理是一项至关重要的能力。项目管理需要具备的能力包括&#xff1a;有效的沟通能力、团队协作能力、时间管理能力、风险管理能力、以及问题解决能力。 其中&#xff0c;有效的沟通能力尤为重要&#xff0c;它不仅涉及到信息的传递&#xff0c;还包…

HCIP快速生成树 RSTP

STP&#xff08;Spanning Tree Protocol&#xff0c;生成树协议&#xff09;和RSTP&#xff08;Rapid Spanning Tree Protocol&#xff0c;快速生成树协议&#xff09;都是用于在局域网中消除环路的网络协议。 STP&#xff08;生成树协议&#xff09; 基本概念&#xff1a; ST…

YOLOv11实战PCB电路板缺陷识别

本文采用YOLOv11作为核心算法框架&#xff0c;结合PyQt5构建用户界面&#xff0c;使用Python3进行开发。YOLOv11以其高效的实时检测能力&#xff0c;在多个目标检测任务中展现出卓越性能。本研究针对PCB电路板缺陷数据集进行训练和优化&#xff0c;该数据集包含丰富的PCB电路板…

把握鸿蒙生态崛起的机遇:开发者视角的探讨

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; 近年来&#xff0c;鸿蒙系统&#xff08;HarmonyOS&#xff09;的发展备受瞩目。随着其在智能手机、智能穿戴、车载系统和智能家居等领域的广泛应用&#xff0c;鸿蒙系统正逐渐形成与安卓、iOS并列的三足鼎立…

丹摩征文活动|FLUX.1+ComfyUI高效部署策略与实践

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ 丹摩征文 1. FLUX.1简介2. 部署流程创建资源登录实例部署ComfyUI部署FLUX.1 3. 使用流程运行FLUX.1 4. 导入工作流5. 实践感想 前言&#xf…