在开发一些小程序的时候,也许我们并不在意作用域的必要性。可是,当你书写几万行,甚至几十万行的代码的时候,没有作用域肯定是不能忍受的。
C 语言有如下 3 种作用域。
1、全局变量
在函数之外声明的变量,默认地会成为全局变量。全局变量在任何地方都是可见的。当程序被分割为多个源代码文件进行编译时,声明为全局变量的变量也是可以从其他源代码文件中引用的。
2、文件内部的静态变量
就算对于像全局变量那样被定义在函数外面的变量,一旦添加了 static,作用域就只限定在当前所在的源代码文件中。通过 static 指定的变量(包括函数),对于其他源代码文件是不可见的。在英语中,static 是“静态的”的意思,我实在想不明白为什么这个功能莫名其妙地被冠以“static”,这一点可以算是 C 语言的一个未解之谜。
3、局部变量
局部变量是指在函数中声明的变量。局部变量只能在包含它的声明的语句块(使用{}括起来的范围)中被引用。
局部变量通常在函数的开头部分进行声明,但也可以在函数内部某语句块的开头进行声明。例如,在“交换 2 个变量的内容时,需要使用一下临时变量”的情况下,将局部变量声明放在当前语句块开头还是比较方便的。
局部变量通常在它所在的语句块结束的时候被释放。如果你不想释放某个局部变量,可以在局部变量上加上 static 进行声明。
另外,除了作用域不同,C 的变量之间还有 存储期(storage duration)的差别。
1、静态存储期(static storage durati