????????C语言中的?static?和?extern?关键字都是作用在变量和函数中的, 所以我们会通过变量和函数来分别进行叙述。 ? ? ?
1、c语言中的static关键字
????????在C语言中,static可以用来修饰局部变量,全局变量以及函数。在不同的情况下static的作用不太相同。
????????(1)修饰局部变量修饰局部变量一般情况下,对于局部变量是存放在栈区的,并且局部变量的生命周期在该语句块执行结束时便结束了。但是如果用static进行修饰的话,该变量便存放在静态数据区,其生命周期一直持续到整个程序执行结束。所以说他具有继承性(在下个函数调用时可能会接着进行运算)但是在这里要注意的是,虽然用static对局部变量进行修饰过后,其生命周期以及存储空间发生了变化,但是其作用域并没有改变,其仍然是一个局部变量,作用域仅限于该语句块。在用static修饰局部变量后,该变量只在初次运行时进行初始化工作,且只进行一次。
????????(2)修饰函数修饰函数用static修饰函数的话,情况与修饰全局变量差不多,就是改变了函数的作用域。
????????(3)修饰全局变量修饰全局变量 ? 对于一个全局变量,它既可以在本源文件中被访问到,也可以在同一个工程的其它源文件中被访问(只需用extern进行声明即可)
2、c语言中的externa关键字
???extern 对函数的作用。默认情况下,声明和定义一个函数,都有一个extern 的前缀,这意味着在声明和定义函数时,前面不写extern ,它也是默认存在的。
? ? ? ? 在这里需要注意的是由于声明可以多次重复,但定义只能完成一次,
????????关键字extern 用于扩展变量和函数的可见性。
????????修饰符extern用在变量或者函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。extern声明不是定义,即不分配存储空间。简单的说 extern 对该变量作“外部变量声明”,表示该变量是一个已经定义的外部变量。有了此声明,就可以从“声明”处起,合法地使用该外部变量。需要注意的是,由于用 extern 引用外部变量,可以在引用的模块内修改其变量的值,因此,如果有多个文件同时要对应用的变量进行操作,而且可能会修改该变量,那就会影响其他模块的使用。
?补充:在此之前关于C语言中的声明和定义我们应该知道:
????????
????????1. 函数和变量的声明不会分配内存, 但是定义会分配相应的内存空间
????????2. 函数和变量的声明可以有很多次, 但是定义最多只能有一次
????????3. 函数的声明和定义方式默认都是 extern 的, 即函数默认是全局的
????????4. 变量的声明和定义方式默认都是局部的, 在当前编译单元或者文件内可用
|