C语言篇二:标识符属性之作用域、生存期、可见性

作用域和生存期

作用域

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

1、文件作用域

标识符从它声明之处到它所在的源文件结尾处都是可以访问的

2、代码块作用域

位于一对花括号之间的所有语句称为一个代码块
标识符从定义开始到结尾处花括号之间

3、原型作用域

只适用于函数原型中声明的参数名

4、函数作用域

他只适用于语句标签,语句标签用于goto语句

链接属性

标识符链接属性决定如何处理在不同文件中出现的标识符。
标识符的作用域和链接属性有关,但这两个属性并不相同

1、external(外部)

不论声明多少次、位于几个源文件都表示同一实体

2、internal(内部)

标识符在同一源文件内的所有声明中都指向同一实体,但位于不同源文件的多个声明则分属不同实体

3、none(无)

没有链接属性的标识符总是被当作单独的个体,也就是说该标识符的多个声明被当作独立不同的实体

存储类型

存储类型决定何时创建、何时销毁以及它的值将保存多久。

1、普通内存

2、堆/栈

3、硬件寄存器

static作用

1、static修饰全局变量,该变量链接属性从外部变为内部。
2、static修饰局部变量,局部变量存储位置从栈变为全局区,作用域仍为函数作用域。
3、static修饰函数,函数链接属性从内部变为外部。

extern作用

当extern关键字用于源文件中第一个标识符的第一次声明时,它指示该标识符具有wxternal链接属性。当它用于该标识符的第二次或以后声明时,它并不会更改由第一次声明所指定的链接属性。

总结

作用域就是在程序中可以被使用范围,链接属性是处理不同文件中中的标识符。
1、全局变量
文件作用域、external链接属性、静态区(全局区)
变量的定义和声明不是相互独立的(不用extern只能定义,不能声明)。全局变量的作用域为文件作用域,所以在其他文件中使用这个变量,编译器会返回没有定义该变量,全局变量的链接属性为外部链接属性,如果两个文件定义相同标识符。编译器会返回同一标识符多次定义错误。所以全局变量的声明需要extern进行声明链接属性。
2、局部变量
代码块作用域、none链接属性、栈存储
3、函数
文件作用域、external链接属性、代码段
函数的定义和声明是相互独立的。所以在其他文件中使用该函数,只需要声明该函数就可以在本文件中使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值