0


赶紧进来!!带你了解什么是多文件,并轻松掌握 extern和static c语言关键字的用法!!!

想必每个人一开始了解static,extern都有很多困惑和不解吧,仔细阅读这篇博客,会带你对他们有个更深层次的认识,所谓一回生,二回熟,知识接受都是循序渐进,接触多了,自然就懂了~

多文件的概念

在一个工程中,我们为了方便管理和维护代码,通常会用多个.c 源文件,
而单纯的使用源文件,组织项目结构的时候,维护成本会变得越来越高,为了解决大型项目维护成本问题,会使用.h头文件。

.c源文件和.h头文件的使用和注意事项

当我们在一个.c源文件定义函数或全局变量时,某个函数出错了想要调试,往上一看七七八八的函数定义堆在一起,不但难找还眼花缭乱,这时我们可以再创建一个.c源文件,在新创的文件里进行各种函数和全局变量的定义,而要用到外部源文件定义的函数或变量就要声明,此时创建一个.h头文件用来放外部的函数和变量的声明,最后每个.c源文件用将.h头文件包含,表示文件里可以访问.h头文件的内容,并且.h是会被包含的,所以里面还可以放要用到的预处理指令define等。讲的有的复杂,先看一些图片了解一下↓

在这里插入图片描述
在这里插入图片描述
这个是一个顺序表结构程序,具体实现先不了解,可以看到用了两个.c源文件和一个.h头文件,它们各个文件放的内容都和我上面讲到的一样,将一个工程分多个文件实现可以解决维护成本问题。

注意事项:

1.这些多个文件共同构建成一个工程,而一个工程只能有一个main函数,所以,只能有一个.c源文件里有main.

2…h头文件基本会被多个源文件包含,则可能会出现头文件重复包含的问题,为避免这种情况可以用预处理指令#include pragma放在头文件开始,可以解决头文件被重复包含的问题。

extern的使用和注意事项

上面说到声明外部函数或变量,就要用到extern这个关键字,当在一个.c源文件里定义了一个全局变量或函数,你要在另一个.c源文件里访问则要使用extern声明外部函数或变量,具体实现如下↓
在这里插入图片描述
在这里插入图片描述

在.h头文件里用到了extern 声明了外部函数和变量,此时可以在本文件中访问声明的外部文件函数和变量。

注意事项:

声明变量时需要 变量的类型和变量名,且声明的时候不能直接对其变量里进行赋值。
就比如声明就像你跟别人说你有东西放在了一个地方,说的时候只是跟对方声明了位置,并不能立即到那个地方拿这个东西,只能声明后的去到那个地方拿东西,即在声明后才能访问其外部变量。

声明函数 要写函数的返回类型,函数名,函数的参数类型,这里最好把对应的函数参数变量名也加上,方便识别。
当函数和变量都放在整个main函数后面时,此时文件是无法访问它们的,要想访问到,也需要在文件开始用extern声明上他们才能访问!

最后,extern声明外部函数或变量时可以省略此关键字如上图1第20行代码,但不建议这样操作,容易搞混,建议还是加上extern

static的使用

在c语言中static有两个作用而c++中有三种,这里介绍c语言里的两种作用

一、static修饰变量

static声明局部变量:
先上一段代码题~
在这里插入图片描述
此代码最后输出的结果是什么?
在这里插入图片描述
答案是10个1.
这个代码题就牵扯到了作用域和生命周期,不懂这两个关键词可以在我上一篇博客中看一下。
当了解了这两个知识点做这道题就很轻松了,接下来看下一道题↓
在这里插入图片描述
int num前加了static修饰,这次运行结果又是什么呢?

在这里插入图片描述
答案是1-10,
这就是static的第一个用法,static修饰局部变量时,会延长其生命周期,此时num的生命周期和全局变量生命周期一样,只有在文件结束时才被释放,但作用域还在text函数内部。
在函数里的局部变量是会放在栈区里的,但static修饰的局部变量是在栈区吗,答案是:
不在!,因为栈区在函数结束后会被释放里面所要空间都会还给操作系统,而被static修饰的局部变量延迟了生命周期,空间不会被释放,
此时他是存放在 静态区的。而静态区是用来存放全局变量、和static修饰的局部变量的。这样就好理解 它的生命周期和全局变量一样。

static修饰全局变量

先上一段代码
在这里插入图片描述
这是两个文件,请问结果输出是什么?
在这里插入图片描述
输出结果是1,
这个题是对上面将的extern的练习~ 在外部文件里有一个全局变量int n=1 此时在本文件里 用extern 声明了外部变量,则此时此文件后续可以对外部文件里的变量n进行访问。
再看一题↓
在这里插入图片描述
在外部全局变量前面有static修饰此时结果为什么呢?
在这里插入图片描述
答案是:编译错误!! 我们得出static修饰全局变量时,其变量不能被外部文件访问,只能在本文件中被访问。
以上是static修饰变量产生的作用,再看第二个作用

二、static修饰函数

老规矩,先做一道题↓ 程序输出结果是什么?在这里插入图片描述
在这里插入图片描述
当然是好好学习天天向上啦~ 这个题也是extern的用法,声明了外部文件的函数 在本文件里才能对其访问。现在对extern有个大致的了解了吧~~
如果在此函数前有static修饰结果又是什么呢?
在这里插入图片描述
在这里插入图片描述
答案和static修饰全局变量一样,编译错误!!!

这里就有疑惑了,既然我们写文件不就应该可以让外部文件能够访问才创建多文件吗,static修饰函数或变量又不给外部文件访问那有什么意义呢?
我们要知道,以后写代码不仅仅是你自己一个人的工作,而是你和你的同事一起合作,而你们共同写这一个模块时,免不了函数或变量会出现名字重复的情况,那此时则在声明时有两个同名函数或变量就会出错,而有了static修饰后函数或变量后,它就不会被外部函数声明访问,就解决了这一问题。
在这里插入图片描述
这串代码又是什么意思呢,
在这里插入图片描述
答案还是好好学习天天向上,他是调用text函数实现的吗,text被static修饰了显然无法访问text,但jiekou函数没有被static修饰,此是我访问的是jiekou函数的内容,而在jiekou函数里我运行了text函数 使得最后程序执行了text函数的功能,此时text函数无法被外部函数调用,但我在其jiekou函数里提供了一个接口 调用jiekou函数可以实现text函数的功能就起到一个提高安全性的作用,这就为项目维护提供了一个安全保证。

所以,static的两个作用都是有其意义的!!!

static的用法总结

我们可以得出static修饰局部变量时会延长其生命周期会保留里面的数据以便下次访问,static修饰全局变量和函数时,表示该全局变量和函数只能在本文件内部被访问,在外部文件里即使声明了,也无法对其访问!!

多文件的概念 ,extern,static的两大用法到这里结束了,相信你对其有了个大概的了解,本人知识储备有限,如果文章有什么错误,还请积极指正!!
本人还会在接下来继续努力学习,写更多学习价值质量高的博客,请多多点赞关注支持!!!!

标签: c语言 开发语言

本文转载自: https://blog.csdn.net/lch1552493370/article/details/125875890
版权归原作者 牛牛要坚持 所有, 如有侵权,请联系我们删除。

“赶紧进来!!带你了解什么是多文件,并轻松掌握 extern和static c语言关键字的用法!!!”的评论:

还没有评论