目录
一、为什么会有static关键字?
1、有关多文件中的声明文件.h
为什么会诞生.h头文件?
在用C语言写大型项目时,一定会同时创建许多个源文件来共同实现整个项目,但我们知道不同源文件中定义的全局变量,在其他文件里面是不能使用的,需要先使用extern关键字进行变量的声明才能使用,但是这些大量的源文件之间的“互交”可以说是大量的,频繁的,那么我们就需要在每一个源文件中都声明一遍吗?而且“互交”使用的全局变量可能是非常多的,这无疑是增加了代码的编写效率,降低了代码的维护性。为了解决这种声明问题,就诞生了.h头文件,将所有的声明都放在头文件中,最后只需要包含一个头文件就可以解决所有的声明。
extern:声明全局变量时不能设置初始化值,声明时必须带上,(虽然不带extern也可以),但如果不带上语法上分析是定义而不是声明。
函数声明也可以带上extern,建议带上(好习惯)
2、头文件中的重复包含问题
如果多次包含同一个头文件,可能会出现重复包含的情况,代码就会做无用的复制,会降低代码的效率。
解决方法一:直接加上#pragma once
解决办法二:条件编译
3、函数不声明可以在其他源文件使用吗?
答案是可以的。
虽然编译器会出现函数未定义的告警,但仍然可以使用这个函数,但是为什么呢?
我们需要知道,函数是在什么时候被使用的。在进程进行编译时,编译器会发现这个源文件里面没有这个函数的定义,这时编译器就会出现告警,在进程进行连接时,编译器将所有的文件连接在一起,这时在其他文件里定义的函数就相当于在同一个文件中了,所以仍然可以被使用。
4.static关键字的诞生
在编写一个程序时,我们会为使用者提供一些接口,调用这些接口来实现各种各样的功能,但是在一些必要的函数或者全局变量,我们是不希望暴露在使用者的面前的,这会使我们代码的“秘密”暴露,而这些“秘密”我们是不希望别人知道的,而static关键字就可以解决这个问题。
无疑可以有利于项目的维护,和提供代码的安全保证。
二、static关键字的用法详解
1.static用法
修饰的全局变量或者函数,只能在本文件直接访问,或被其他文件间接访问。使暴露的接口尽可能的减少。
是一套项目维护,提供安全保证的机制。
限制的是函数或全局变量作用域。
可以修饰局部变量:更改局部变量的生命周期,临时变量->全局生命周期,不改变作用域
static修饰临时变量后,就被放着全局数据区。