作用域 属性链接 存储类型

一:作用域:

4中不同类型的作用域:代码块作用域,函数作用域,文件作用域和原型作用域

1:代码块作用域:

一对花括弧的代码称作一个代码块,任何在花括弧开始声明的标识符都具有代码块作用域

形参隐藏的问题:

      K&RC中,形参在函数体外的声明中开始变生效,如果在函数体内有同名的表示服,他们就会将形参隐藏。
      ANSIC中避免了这种情况,他把形参的作用域定义在函数最外层的那个函数体,也就是整个函数体,这样,声明与函数最外的局部变量无法和形参同名,因为他们的作用域相同
2:文件作用域:

任何在所有代码块之外声明的表示符都具有文件作用域

3:原型作用域:

函数原型中声明的参数名

只是为了防止名字冲突,但是并不是很有必要

4:函数作用域

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

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------分割线

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

标识符的链接属性决定如何处理在不同文件中出现的标识符,标识符的作用域和他的连接属性也有关系,但是这两者并不是完全一样

链接属性一共有三种,external(外部的),internal(内部的)和none(无)

none的链接属性被当做单独的个体,也就是该标识符的多个声明被称为独立的个体

internal属性的标识符在同一个文件中的被认为是一个实体,不同的文件中被认为是不同的实体,

external属性的标识符在不同的文件,无论被声明多少次都被认为是一个实体

关键字extern和static用于改变标识符的链接属性,如果某个标识符是external属性的,加上static会被改为internal属性,但是static只对确性条件下为external属性的标识符才会起到改变连接属性的作用

extern指的是为一个标识符声明为external链接属性

但是extern只在第一次声明有效,如果又多次对同一个标识符进行声明extenr类型,只要第一次会起到效果

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

存储类型

变量的存粗类型是指存储变量值得内存类型,有3个地方可以存粗变量,普通内存,堆栈,硬件寄存器

变量的缺省存粗类型取决于他的生命位置,凡是代码快之外的标识符都存放在静态内存中static,,在代码快内部申明的变量都存放在堆栈中,称为自动变量auto

**********修改代码的存储类型并不代表修改了标识符的作用域

**********函数的参数不能声明为静态的,因为实参寄存于堆站中,实参要向形参中传参

最后,关键字register可以用于自动变量的声明,提示他们应该存在寄存器中,这类变量也称为寄存器变量,通常寄存器变量的访问往往比内存的访问效率高,但编译器并不一定那么做,如果resister类型的变量过多,编译器只是选择前几个进行声明,其他的补多关心,

static关键字:

当他用于定义函数或者定义代码快之外的变量时候,static只是改变了关键字的连接属性,并不改变作用域和存储类型

当他定义在代码块的局部变量的时候,static改变了存粗类型,,但是链接属性和作用域并没有改变

时间: 2024-10-11 22:40:41

作用域 属性链接 存储类型的相关文章

C语言:链接属性与存储类型

一. 链接属性 C语言中链接属性决定如何处理在不同文件中出现的标示符.标示符的作用域与它的链接属性有关,但这两个属性并不相同. 链接属性有3种: external(外部),internal(内部) 和 none(无). 1. none: 没有链接的标示符,总是被当做单独的个体,也就是说改标示符的多个声明被当做不同的实体. 2. internal: 在同一个源文件内的所有声明中都指同一个实体,但位于不同源文件的多个声明则分属不同的实体. 3. external: 标示符不论声明多少次,位于几个文件

关于extern和static关键字引出的一些关于作用域和链接属性和存储类型的问题

在进入正题前我们必须了解一些概念: 标识符:标识符不仅仅代表着变量的名字,main()函数的main也是一个标识符,这点很重要. 存储类型:即变量的存储位置及其生存周期:静态区:分为两块 .date 已显式初始化的全局变量了静态变量 .bss 存放未初始化的全局或者静态变量 注意:静态变量的初值是在编译时就进行初始化了:意思就是用static修饰的变量赋过数值的话就保存为他的初值,如果没有初始化的话就赋值为零,且整个程序只初始化一次:即不管static int i = 1:或者这 static

【转】作用域、链接属性、存储类型总结--转载学习,很清晰,很详细

标识符: 首先,在讨论这三种东西之前,详细说明一下C语言中的标识符. 标识符是用户编程为变量.常量.函数.语句等指定的名字,就好比人名一样的东西. 标识符的命名规则如下: 1.只能由字母.数字.下划线组成,并且首字符不能是数字: 2.不能把C语言的关键字作为标识符: 3.对大小写敏感: 其次,需要明确,作用域和链接属性是在标识符范畴内讨论的,存储类型是在标识符中的变量范畴内讨论的. 作用域: 标识符的作用域就是程序中该标识符可以被使用的区域,由它的声明位置决定. 分为以下四类: 1.文件作用域

C语言中的作用域,链接属性和存储类型

作用域 当变量在程序的某个部分被声明的时候,他只有在程序的一定渔区才能被访问,编译器可以确认4种不同类型的作用域:文件作用域,函数作用域,代码块作用域和原型作用域 1.代码块作用域:位于一对花括号之间的所有语句称为一个代码块.任何在代码块的开始位置声明的标识符都具有代码块作用域,表示他可以被这个代码块中的所有语句访问.(例子中:f,g函数,i) 2.文件作用域:任何在所有代码块之外声明的标识符都具有文件作用域,他表示这些标识符从他们的声明之处直到他所在的源文件结尾处都是可以访问的.(例子中:a,

嵌入式 Linux C语言(八)——存储类型、作用域、生命周期、链接属性

嵌入式 Linux C语言(八)--存储类型.作用域.生命周期.链接属性 一.存储类型 C语言中,每个变量和函数都有两个属性:数据类型和数据的存储类型. 变量的存储类型是指存储变量值的内存类型.变量的存储类型决定变量何时创建.何时销毁以及它的值将保持多久.计算机中有三个地方可以用于存储变量:普通内存,运行时堆和栈,硬件寄存器.变量的存储类型取决于声明变量的位置. C语言存储类别说明符: 说明符 用    法 auto 只在代码块内变量声明中被允许, 表示变量具有本地生存期 extern 出现在顶

C和指针 3.9作用域、存储类型示例

1 int a = 5; 2 extern int b; 3 static int c; 4 5 int d( int e ) 6 { 7 int f = 15; 8 register int b; 9 static int g = 20; 10 extern int a; 11 ... 12 { 13 int e; 14 int a; 15 extern int h; 16 ... 17 } 18 ... 19 { 20 int x; 21 int e; 22 ... 23 } 24 ...

Swift研究之编程高级教程(二)属性,存储属性详解

 属性 属性是依赖于某个特定的类.结构体或者枚举类型的值.Swift有两种属性:存储类型和计算类型.其中存储类型可以作为实例的一部分存放变量或者常量的值,而计算类型的属性值是通过运算的来的.计算类型的属性可以在类.结构体和枚举类型中出现,但存储类型只可能出现在类和结构体类型中. 属性一般依赖于一个特定类型的实例,但是也可以依赖于类本身.依赖于类型本身的属性称为类型属性. 可以定义属性观察者来监督属性值的改变,从而作出响应.对集合不明白的看集合类型-数组详解 存储属性 常量属性let的值在初始

【转】C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型

Technorati 标签: C,标识符,作用域,命名空间,链接属性,生命周期,存储类型,scope,name space,linkage,storage durations,lifetime 无论学习哪一种语言,都免不了要讨论这些问题.而且这些问题,深究起来有时也让我们很迷惑. 标识符的定义无需多讲,只需注意不仅仅是指变量,还有函数,标签等. 1. 标识符的作用域 作用域是指允许对标识符进行访问的位置范围.按照C99(章节6.2.1),C语言的作用域共有 4 种类型:文件作用域.代码块作用域.

C语言第九回合:作用域和存储类型

C语言第九回合:作用域和存储类型  [学习目标] 1.        局部变量 2.        全局变量 3.        存储类型 4.        内存 A: 局部变量 局部变量也称为内部变量.局部变量是在函数内定义说明. 作用域:仅在声明的函数或复合语句内内,有效区也在函数或复合语句内. B: 全局变量 全局变量也称为外部变量,是在函数外定义的变量. 作用域:整个与程序文件 PS: 局部变量和全局变量是按照作用域来划分的. #include <stdio.h> int numub