当前位置:首页 > 公众号精选 > wenzi嵌入式软件
[导读]本文介绍了C语言中extern的三种用法。

extern 的含义

首先看到 extern 的出现,我们应该明白其含义是全局的意思。其次当看到 extern 修饰一个变量时,我们应该能够区分这是对于一个变量的声明,相应的,有了对于变量的声明,那么就应该具备变量的定义。关于变量的声明和变量的定义的区别,笔者曾经看到一句话是这样进行描述的,变量的存在需要一个存储空间,那这个存储空间就好比是房子,那变量的声明就好比是你拿到了对于房子的房产证,但是还没有拿到房子,变量的定义便是你已经住到房子里面了,已经在使用房子了。关于 extern 所声明的全局变量,我们最常见的分为两种:

1、没有用 extern 声明的变量,直接在文件头定义。

2、用 extern 声明变量,然后再在一个 .c 文件定义变量

以上两种方式定义的变量定义的变量均称之为全局变量,只不过变量的作用域范围有所不同,第一种的作用域范围仅限于本文件,第二种方式定义的全局变量的作用域范围是整个工程。还有一种方法是笔者在阅读 RT_Thread 源码的时候发现的一种用法,其作用域范围介于上述两种之间。

直接在文件头定义

如图所示,在test1.c文件头定义了 iNum 变量,test1.c中的function0() 和 function1()都可以使用这个变量,最后在main函数中调用这两个函数,输出的值是2.但是 iNum 不能在 main.c 文件中使用,也就是不能跨文件使用。

extern 声明变量

为了能够使得变量能够跨文件使用,也就是作用域扩大到整个工程,这里引入里 extern 声明变量的用法,对于笔者的习惯而言,我一般是将 extern 声明的变量放在 .h 文件中,如下图所示:

这样,iNum 便可以跨文件进行使用了,但是跨文件使用的要进行头文件包含,要包含 extern 声明变量所在的头文件。

在函数内用 extern 声明变量

在函数内用 extern 声明变量与前两种的作用域范围有所不同,介于上述两者之间,具体的用法如下图所示: 

我在 test.c 文件头定义了一个变量 iNum,但是没有在头文件进行声明,因此这个变量作为全局变量的作用域范围是 test.c 文件,但是与第一个例子不同的是,我虽然没有在头文件进行声明,但是我在 function.c 文件里的function3() 函数里声明了 iNum,所以它的所用域范围扩大到 function3() 函数内,当function3() 函数运行结束,iNum的作用域又缩小至 test.c 文件内。


免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

2024年3月8日 – 专注于引入新品的全球电子元器件和工业自动化产品授权代理商贸泽电子 (Mouser Electronics) 即日起供货Advantech的VEGA-P110 PCIe Intel® Arc A37...

关键字: 嵌入式 GPU卡 边缘AI

康佳特采用博世力士乐的 ctrlX OS 操作系统

关键字: 计算机模块 嵌入式 机器人

先楫新一代的仪表显示产品具有高画质、低功耗等特点。

关键字: 嵌入式 GPU 图形处理器

在这篇文章中,小编将为大家带来嵌入式开发的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: 嵌入式 嵌入式开发

以下内容中,小编将对嵌入式开发的相关内容进行着重介绍和阐述,希望本文能帮您增进对嵌入式开发的了解,和小编一起来看看吧。

关键字: 嵌入式 嵌入式开发 嵌入式系统

本文中,小编将对嵌入式开发予以介绍,如果你想对它的详细情况有所认识,或者想要增进对嵌入式的了解程度,不妨请看以下内容哦。

关键字: 嵌入式 嵌入式开发

在这篇文章中,小编将为大家带来嵌入式开发的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: 嵌入式 嵌入式开发

由AMD Kria™ K26 SOM提供支持的视觉 AI 盒能以高速处理摄像头图像,以更为有效地检测轨道

关键字: AI 自动化 嵌入式

ST的许多合作伙伴和客户都希望有更多的产品能够利用STM32Cube开发环境。开发人员很享受开发环境的图形用户界面和工具的易用性,如STM32CubeMX、免费的STM32CubeIDE以及许多软件包、驱动程序和中间件,...

关键字: 工具链 嵌入式 神经网络模型
关闭
关闭