关键字(extern/static)与标识符的三个属性(链接属性、作用域、存储类别)

变量声明的基本形式:

说明符【一个或多个】  声明表达式列表
(static/extern/none) (static/register/auto) (数据类型) 标识符

说明符包含了一些关键字,用于描述被声明的标识符的基本类型。
说明符也可以用于改变标识符的缺省存储类型和作用域。

链接属性:

1、决定如何处理在不同文件中出现的标识符。
2、与作用域相关。
3、链接属性一般和标识符的定义和声明一起使用

类型:

  • internal链接属性:标识符(变量或者函数)只能在源文件使用
       static 修饰的全局变量为 internal链接属性

  • external链接属性:标识符(变量或者函数)可以在其他源文件使用
      全局变量默认都是external链接属性,external类型的标识符或函数无论声明多少次、无论位于不同源文件都表示同一个实体。

  • none:没有链接属性的标识符,总是被当作单独的个体,也就是说该标识符的多个声明被当作独立不同的实体。
       局部变量和函数形参都是none链接属性的。

作用域

标识符的作用域就是程序中该标识符可以被使用的区域。


作用域分为四种类型:

代码块作用域

位于一对花括号之间的所有语句成为一个代码块。

文件作用域

在所有代码块之外声明的标识符都具有文件作用域

原型作用域

函数原型的参数【非必须,但如果有的话】享有独立的作用域,不需要和函数定义时的形参。
原型作用域防止这些参数名与程序其他部分的名字冲突。

int add(int c, int d);// 函数声明
int add(int a, int b) //函数定义
{
	return a + b;
}
函数作用域

语句标签,语句标签用于 goto 语句,一个函数的所有语句标签必须唯一。

存储类型

变量的存储类型是指存储变量值的内存类型。变量的存储类型觉得生命期。
关键字
auto:自动类型,存储于运行时堆栈中【运行时堆栈和数据结构上的堆栈不同】详情可点链接
static:静态变量,存储于静态区,生命期延长至程序结束,不会重复初始化。
函数形参不能设置为静态变量,否则无法放入堆栈,无法完成传参,因为传参都是从堆栈传给函数,用于支持递归
register:存储于硬件寄存器中,变量放入寄存器中访问效率会变高,但是

存储区
  • 代码区:存储方法体的二进制代码。
  • 静态存储区

在执行程序前分配存储空间,占据固定的存储单元。
存储全局变量、静态变量、常量,常量包括String常量。系统自动分配和回收。

  • 动态存储区


局部变量、函数返回值、形参、都存放在动态存储区,函数执行时使用,执行完释放空间,以上数据与其使用空间在函数执行前后没有必然联系。系统自动分配和回收。

malloc产生的数据,由程序员分配或回收,程序结束后系统也可以回收。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值