存储类、链接和内存管理

作业部落简书 同步发布

CH12 存储类、链接和内存管理

作用域(scope)

  • 代码块作用域(block scope): 包含在开始花括号{和对应结束花括号}之内的一段代码。

传统上,具有代码块作用域的变量都必须在代码块的开始处进行声明。C99放宽了这以规则,允许在一个代码块的任何位置声明变量。你一定见过类似这样的代码:

for(int i=0; i<10; i++)
    printf("A C99 feature: i = %d\n",i);

在一些古老的IDE或者编译器上,这样的代码可能编译不通过,主要原因可能就是它不支持C99的新特性。

  • 文件作用域(file scope): 具有文件作用域的变量从它定义处到包含该定义的文件借书处都是可见的。
  • 函数作用域(function scope): 它只适用于goto语句使用的标签(label)。函数作用域意味着一个特定函数中的goto标签对该函数中任何地方的代码都是可见的,无论该标签出现在哪个代码块中。

链接(linkage)

  • 外部链接(external linkage): 一个具有外部链接的变量可以在一个多文件程序的任何地方使用。
  • 内部链接(internal linkage): 一个具有内部链接的变量可以再一个文件的任何地方使用。
int giants=5;          // 文件作用域,外部链接
static int dodgers=3;  // 文件作用域,内部链接 
  • 空连接(no linkage): 具有代码块作用域或者函数原型作用域的变量有空连接,意味着他们是由其定义所在的代码块或者函数原型所私有的。

存储时期(storage duartion)

  • 静态存储时期(static storage duration): 如果一个变量具有静态存储时期,它在程序执行期间将一直存在。具有文件作用域的变量具有静态存储时期。注意对于具有文件作用域的变量,关键词static表明链接类型并非存储时期。
  • 自动存储时期(auto storage duration): 具有代码块作用域的变量一般情况下具有自动存储时期。

总结

C使用作用域、链接和存储时期来定义五种存储类:

  • 自动
  • 寄存器
  • 具有代码块作用域的静态
  • 具有外部链接的静态
  • 具有内部链接的静态
存储类时期作用域链接声明方式
自动自动代码块代码块内
寄存器自动代码块代码块内,使用关键字static
具有外部链接的静态静态文件外部所有函数之外
具有内部链接的静态静态文件内部所有函数之外,使用关键字static
空连接的静态静态代码块代码块内,使用关键字static
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值