重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本篇文章为大家展示了extern中容易忽视的用法是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
10多年专注成都网站制作,成都企业网站建设,个人网站制作服务,为大家分享网站制作知识、方案,网站设计流程、步骤,成功服务上千家企业。为您提供网站建设,网站制作,网页设计及定制高端网站建设服务,专注于成都企业网站建设,高端网页制作,对履带搅拌车等多个领域,拥有丰富的网站营销经验。
首先看到 extern 的出现,我们应该明白其含义是全局的意思。其次当看到 extern 修饰一个变量时,我们应该能够区分这是对于一个变量的声明,相应的,有了对于变量的声明,那么就应该具备变量的定义。关于变量的声明和变量的定义的区别,笔者曾经看到一句话是这样进行描述的,变量的存在需要一个存储空间,那这个存储空间就好比是房子,那变量的声明就好比是你拿到了对于房子的房产证,但是还没有拿到房子,变量的定义便是你已经住到房子里面了,已经在使用房子了。关于 extern 所声明的全局变量,我们最常见的分为两种:
没有用 extern 声明的变量,直接在文件头定义。
用 extern 声明变量,然后再在一个 .c 文件定义变量
以上两种方式定义的变量定义的变量均称之为全局变量,只不过变量的作用域范围有所不同,第一种的作用域范围仅限于本文件,第二种方式定义的全局变量的作用域范围是整个工程。还有一种方法是笔者在阅读 RT_Thread 源码的时候发现的一种用法,其作用域范围介于上述两种之间。
如图所示,在test1.c文件头定义了 iNum 变量,test1.c中的function0() 和 function1()都可以使用这个变量,最后在main函数中调用这两个函数,输出的值是2.但是 iNum 不能在 main.c 文件中使用,也就是不能跨文件使用。
为了能够使得变量能够跨文件使用,也就是作用域扩大到整个工程,这里引入里 extern 声明变量的用法,对于笔者的习惯而言,我一般是将 extern 声明的变量放在 .h 文件中,如下图所示:
这样,iNum 便可以跨文件进行使用了,但是跨文件使用的要进行头文件包含,要包含 extern 声明变量所在的头文件。
在函数内用 extern 声明变量与前两种的作用域范围有所不同,介于上述两者之间,具体的用法如下图所示: 我在 test.c 文件头定义了一个变量 iNum,但是没有在头文件进行声明,因此这个变量作为全局变量的作用域范围是 test.c 文件,但是与第一个例子不同的是,我虽然没有在头文件进行声明,但是我在 function.c 文件里的function3() 函数里声明了 iNum,所以它的所用域范围扩大到 function3() 函数内,当function3() 函数运行结束,iNum的作用域又缩小至 test.c 文件内。
上述内容就是extern中容易忽视的用法是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。