1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > c语言 存储 c语言存储类

c语言 存储 c语言存储类

时间:2023-10-07 06:19:48

相关推荐

c语言 存储 c语言存储类

C为变量提供了5种不同的存储类,还有基于指针的第6种存储类。

不同的存储类提供了变量的作用域、链接和存储时期的不同组合。

作用域:描述了程序中可以访问的一个标识符的一个或多个区域。

一个C变量的作用域可以是代码块作用域(code scope)、函数原型作用域(function prototype scope),或者文件作用域(file scope)。

存储类是C语言与C++语言的标准中,变量与函数的可访问性(即作用域范围scope)与生存期(life time)。存储类可分为auto、register、static、extern、mutable、thread_local等。

auto类

auto类是指定于在{与}所限定的作用域内部的局部变量的缺省存储类。-------作用域:代码块

register

register关键字提示编译器把局部变量或函数的形参尽可能放入CPU的寄存器中,以便快速访问。因此变量的字节长度不应该超过寄存器的长度。不要用取地址符(&)去获得此变量的内存地址--------作用域:代码块

static

static是全局变量的默认存储类。

extern

extern存储类是指全局变量可以被各个对象模块访问。使用extern关键字时,表示变量已经在别处定义,所以不能在此处初始化。

mutable

mutable存储类只能用于类的数据成员,不能用于普通变量。具有mutable性质的类的数据成员打破了类对象的const限定,允许修改类的mutable的数据成员,即便类的其它成员仍然是const只读属性。

thread_local

适用于命名空间内的变量、全局作用域的变量、函数内部定义的静态变量,如果使用了thread_local关键字,则在运行时不同的线程具有该变量的不同的存储位置,即各有各的副本。因此,具有thread_local存储类的变量,必然具有static存储类性质,不管是否使用了static关键字。

--------------------------------------我是分割线---------------------------------

一个代码块是包含在开始花括号和结束花括号之内的一段代码。

在代码块中定义的变量具有代码块作用域,从该变量被定义的地方到包含该定义的代码块的末尾,该变量均可见。

另外,函数的形式参数也具有代码块作用域。

C99把代码块的概念扩展到了由for循环、while循环、do while循环或者if语句所控制的代码--即使这些代码没有被花括号括起来。

函数原型作用域适用于函数原型中使用的变量名。其作用域从变量定义处直到原型声明的末尾。如:

int mighty(int mouse, double large);

这说明编译器在处理一个函数原型的参数时,它所关心的只是该参数的类型,在声明中使用说明名字通常是无关紧要的。

一个在所有函数之外定义的变量具有文件作用域。具有文件作用域的变量从它定义处到包含该定义的文件结尾处都是可见的。

文件作用域变量也被称为全局变量(global variable)。

链接:

一个C变量具有下列链接之一:外部链接(external linkage)、内部链接(internal linkage)或空链接(no linkage)。

具有代码块作用域或函数原型作用域的变量有空链接,意味着它们是由其定义所在的代码块或函数原型所私有的。

具有文件作用域的变量可能有内部或外部链接。

一个具有外部链接的变量可以在一个多文件程序的任何地方使用;一个具有内部链接的变量可以在一个文件的任何地方使用。

分辨一个变量具有内部还是外部链接,看其定义是否使用了存储类说明符static:

存储时期:

一个C变量有以下两种存储时期之一:静态存储时期(static storage duration)和自动存储时期(automatic storage duration)。 如果一个变量具有静态存储时期,它在程序执行期间将一直存在。具有文件作用域的变量具有静态存储时期。 具有代码块作用域的变量一般情况下具有自动存储时期。在程序进入定义这些变量的代码段时,将为这些变量分配内存;当退出这个代码块时,分配的内存将被释放。 C使用作用域、链接和存储时期来定义5种存储类:自动、寄存器、具有代码块作用域(空链接)的静态、具有外部链接的静态、具有内部链接的静态。 5种存储类: 存储类 时期 作用域 链接 声明方式 自动自动 代码块 空 代码块内 寄存器 自动 代码块 空 代码块内,使用关键字register 具有外部链接的静态 静态 多文件 外部 所有函数外 具有内部链接的静态 静态 单文件 内部 所有函数外,使用关键字static 空链接的静态 静态 代码块 空 代码块内,使用关键字static

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。