c语言 作用域、链接、存储期

作用域:

       作用域描述程序中可访问标识符的区域。一个C变量的作用域可以是块作用域、函数作用域、函数原型作用域或文件作用域。块是用一对花括号括起来的代码区域。例如,整个函数体是一个块,函数中的任意复合语句也是一个块。定义在块中的变量具有块作用域,块作用域变量的可见范围是从定义处到包含该定义的块的末尾。另外,虽然函数的形式参数声明在函数的花括号之前,但是他们也具有块作用域,属于函数体这个块。所以到目前为止,我们使用的局部变量(包括函数的形式参数)都具有块作用域。

链接:

       C变量有3种链接属性:外部链接、内部链接或无链接。具有块作用域、函数作用域或者函数原型作用域的变量都是无链接变量。这意味着这些变量属于定义他们的块、函数或原型私有。具有文件作用域的变量可以是外部链接可以是内部链接。外部链接变量可以在多文件程序中使用,内部链接变量只能在一个翻译单元中使用。

注意:正式和非正式术语

      C标准用“内部链接的文件作用域”描述仅限于一个翻译单元(即一个源代码文件和它所包含的头文件)的作用域,用“外部链接的文件作用域”描述可延伸至其他翻译单元的作用域。但是,对程序员而言这些术语太长了,一些程序员把“内部链接的文件作用域”简称为“文件作用域”,把“外部链接的文件作用域”简称为“全局作用域”或“程序作用域”。

static:

         int giants = 5;                             //文件作用域,外部链接

         static int dodgers = 3;                //文件作用域,内部链接

         int main()

        {

             ..........

        }

        该文件和同一程序的其他文件都可以使用变量giants,而变量dodgers属文件私有,该文件中的任意函数都可以使用它。

存储期

       作用域和链接描述了标识符的可见性。存储期描述了通过这些标识符访问的对象的生存期。C对象有四种存储期:静态存储期、线程存储期、自动存储期、动态分配存储期。

      如果对象具有静态存储期,那么他在程序的执行期间一直存在。文件作用域变量具有静态存储期。注意,对于文件作用域变量,关键字static表明了其链接属性,而非存储期。以static声明的文件作用域变量具有内部链接,但是无论是内部链接还是外部链接,所有的文件作用域变量都具有静态存储期。

       线程存储用于并发程序设计,程序执行可被分为多个线程。具有线程存储期的对象,从被声明时到线程结束一直存在,以关键字_Thread_local声明一个对象时,每个线程都获得该变量的私有备份。

       块作用域的变量通常都具有自动存储期。当程序进入定义这些变量的块时,为这些变量分配内存;当退出这个块时,释放刚才为变量分配的内存。这种做法相当于把自动变量占用的内存视为一个可重复使用的工作区或暂存区。例如,一个函数调用结束后,其变量占用的内存可用于存储下一个被调用函数的变量。

        变长数组稍有不同,他们的存储期从声明处到块的末尾,而不是从块的开始处到块的末尾。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值