首页 > 其他分享 >C语言--extern关键字介绍

C语言--extern关键字介绍

时间:2024-04-09 18:30:43浏览次数:30  
标签:定义 -- C语言 common extern include 声明 函数

在C语言中,extern关键字用于声明一个变量或函数是在其他地方定义的,而不是在当前文件中。它告诉编译器,变量的定义或函数的实现在其他地方,这样编译器就不会在当前编译单元中查找它们的定义。这样做的好处是可以将一个大型程序分割成多个源文件,每个源文件可以单独编译,最后链接成一个可执行文件。

extern关键字通常用于以下两种情况:

  1. 变量声明:当你想要在一个文件中使用另一个文件中定义的变量时,你可以在使用的文件中使用extern来声明这个变量。

  2. 函数声明:虽然在现代C编程中,通常我们直接使用函数原型来声明函数,但在某些情况下,extern也可以用于声明函数,尤其是在混合使用C和其他语言(如C++或汇编)时。

变量声明

假设我们有两个源文件,file1.cfile2.c,以及一个头文件common.h

common.h

#ifndef COMMON_H
#define COMMON_H
extern int globalVar; // 声明全局变量,定义在另一个文件中
#endif // COMMON_H

file1.c

#include "common.h"
#include <stdio.h>
int main() {
printf("The value of globalVar is: %d\n", globalVar);
return 0;
}

file2.c

#include "common.h"
int globalVar = 42; // 定义全局变量

在这个例子中,globalVarfile2.c中定义并初始化。在file1.c中,我们通过包含common.h头文件来声明这个变量,这样编译器就知道globalVar是一个在其他地方定义的全局变量。

函数声明

虽然在现代C编程中,我们更习惯于直接在头文件中使用函数原型来声明函数,但extern也可以用于此目的,特别是在需要明确表明函数是在其他地方定义的情况下。

common.h

#ifndef COMMON_H
#define COMMON_H
extern void printHello(); // 声明函数,定义在另一个文件中
#endif // COMMON_H

file1.c

#include "common.h"
int main() {
printHello(); // 调用在另一个文件中定义的函数
return 0;
}

file2.c

#include <stdio.h>
#include "common.h"
void printHello() { // 定义函数
printf("Hello, World!\n");
}

在这个例子中,printHello函数在file2.c中定义。在file1.c中,我们通过包含common.h头文件来声明这个函数,表明这个函数是在其他地方定义的。这样,当链接器链接所有的编译单元时,它会找到printHello函数的定义,并将其与main函数中的调用关联起来。

总的来说,extern关键字在C语言中用于声明变量或函数是在其他编译单元中定义的,这允许程序员将程序分割成多个文件,每个文件可以单独编译和链接。

标签:定义,--,C语言,common,extern,include,声明,函数
From: https://blog.csdn.net/MHD0815/article/details/137562598

相关文章

  • C++程序分享--常见编程面试题:判断字符串是否为回文串
    关注我,持续分享逻辑思维&管理思维;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;有意找工作的同学,请参考博主的原创:《面试官心得--面试前应该如何准备》,《面试官心得--面试时如何进行自我介绍》, 《做好面试准备,迎接2024金三银四》。【图解《程序员面试常见的十大算法......
  • 如何删除window10此电脑下的“视频/文档/音乐“等文件夹方法
    按下win+r,输入regedit回车,打开注册表。然后在导航栏里输入HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\NameSpace2、找到相应的键值进行修改操作:(1)更改【下载】文件夹:{088e3905-0323-4b02-9826-5d99428e115f}(2)更改【图片】......
  • sklearn之average_precision_score计算返回NaN
    问题描述使用sklearn计算AP时,当label全是负标签时会返回NaN,例如:>>>importnumpyasnp>>>fromsklearn.metricsimportaverage_precision_score>>>average_precision_score(np.array([0,0,0,0,0]),np.array([0.1,0.1,0.1,0.1,0.1]))xxx/lib/pytho......
  • TME Studio:音乐创作的得力助手
    一、TMEStudio——开启智能音乐创作新纪元官网链接曾几何时,音乐创作的梦想似乎遥不可及,而如今,腾讯音乐娱乐集团推出的TMEStudioAI音乐创作工具,让这一切变得触手可及。它如同一位随身的作曲大师,随时为你谱写美妙旋律;又像一把魔法棒,轻轻一挥,就能为你的歌曲增添丰富的编曲......
  • html中image 区域点击的优点
    在HTML中,图像(image)区域可以被用作交互元素,通过点击操作可以实现多种功能和优点。以下是点击图像区域的一些优点:用户友好的交互:图像是一种直观的视觉元素,用户很容易理解和与之交互。点击图像可以触发预定义的动作或事件,如导航到另一个页面、放大图片、播放视频等,这提供了一......
  • 招投标02-招标文件(标前准备阶段)
    ###################################################前面我们说明了招投标的流程,按照规划内容,本节补齐在标前准备阶段的最后一块:招标文件。01-招投标流程总结详见:https://www.cnblogs.com/hemukg/p/1811211602-招标文件说明在标前准备阶段,招标文件有哪些内容,哪些内容需要注......
  • (亲测好用)使用PHP提取PDF内容的详细步骤与实例
    使用PHP提取PDF内容的详细步骤与实例在现代Web开发中,处理PDF文件的需求越来越普遍。无论是需要读取PDF文件的内容,还是需要进行PDF文件的编辑和转换,PHP都提供了丰富的库和函数来帮助我们完成这些任务。本文将详细介绍如何使用PHP来提取PDF文件的内容,并提供相关的代码示例。1.安装......
  • 在docker部署fastapi宝塔里使用nginx反代套上cloudflare获取请求的真实ip
    在docker部署fastapi宝塔里使用nginx反代套上cloudflare获取请求的真实ip背景是这样的,我使用docker部署了一个fastapi部署了一个应用,使用request.client.host获取请求的来源ip,但是获取到的都是172.17.0.1这显然是不是正常的,是docker网络下的ip,所以我们需要在nginx进行设置转发......
  • 【专题】2023年全球数字消费者趋势调查中国篇报告合集PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=35727原文出处:拓端数据部落公众号数字消费者已成为市场的重要驱动力。他们通过互联网、移动设备等渠道获取信息、购买商品、进行社交,引领着消费市场的变革。中国数字消费者具有网络普及率高、追求个性化消费体验等特点,同时也面临网络安全、数据泄......
  • R语言多元Copula GARCH 模型时间序列预测|附代码数据
    原文链接  http://tecdat.cn/?p=2623原文出处:拓端数据部落公众号 最近我们被要求撰写关于CopulaGARCH的研究报告,包括一些图形和统计输出。和宏观经济数据不同,金融市场上多为高频数据,比如股票收益率序列。直观的来说,后者是比前者“波动”更多且随机波动的序列,在一元或多元......