extern 和 static 总结以及区别

        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. 变量的声明和定义方式默认都是局部的, 在当前编译单元或者文件内可用

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值