December 6, 2015 11:23 AM
1.作用域
文件作用域:从申明位置开始到问价结束
原型作用域:从申明开始到结束,仅限于申明处,主要用于防止参数重名
代码块作用域:位于一对花括号之内,从申明开始到右花括号
函数作用域:只有语句标号属于函数作用域,,不需要先申明再使用,一个函数所有语句标签唯一
2.链接属性
源文件被分别编译之后,所有目标文件、库文件链接之后成为可执行文件。链接属性决定不同源文件中同名标识符的链接方式,链接属性仅第一次申明有效。
链接属性 | 含义 |
---|---|
external | 不同文件相同标识符属于同一个实体。(全部变量,函数名默认为external) |
internal | 用一个源文件相同标识符属于同一个实体(Static只对属性为external的有效,一般修饰函数) |
none | 相同标识符属于单独个体(局部变量默认为none) |
3.存储类型
变量的存储类型指存储变量的内存类型,决定了变量合适何时创建、何时销毁以及他的值保存多久。
存储类型 | 含义 |
---|---|
static | 静态存储,位于普通内存,代码块之外申明的变量、静态变量默认为static,程序运行前创建,运行期间已知一直存在。形参不可用static修饰 |
auto | 自动存储,位于堆栈,代码块内部申明的局部变量默认为auto,形参传递在堆栈中进行,用于支持递归所以形参一定为auto类型 |
register | 位于硬件寄存器,提高执行效率,申明后编译器根据需要确定是否需要分配寄存器 |
4.总结
变量类型 | 申明位置 | 是否存于堆栈 | 作用域 | 声明为static |
---|---|---|---|---|
全局 | 代码快之外 | 否 | 申明到结束 | 不允许其他文件访问 |
局部 | 代码块起始 | 是 | 整的代码块 | 不存于堆栈,执行期间一直存在 |
形参 | 函数头 | 是 | 整个函数 | 不允许,堆栈传递 |
函数 | 否 | 不允许其他文件访问 |