当有人谈论变量存储类说明符时,他们在谈论什么?
他们还经常谈论同一环境中的变量链接,那是什么?
存储类说明符控制变量的存储和链接.这是两个不同的概念.C为变量指定以下说明符:auto,extern,register,static.
存储
存储持续时间决定变量在RAM中的存储时间.
存储持续时间有三种类型:静态,自动和动态.
static
如果您的变量在文件范围内声明,或者使用extern或static说明符,则它将具有静态存储.只要程序正在执行,变量就会存在.没有花费执行时间来创建这些变量.
自动
如果变量在函数中声明,但没有 extern或静态说明符,则它具有自动存储.只有在执行函数时,该变量才会存在.返回后,变量不再存在.自动存储通常在堆栈上完成.创建这些变量是一个非常快速的操作(只需按大小递增堆栈指针).
dynamic
如果使用malloc(或C++中的new),则使用动态存储.此存储将一直存在,直到您调用free(或delete).这是创建存储的最昂贵方式,因为系统必须动态管理分配和释放.
链接
链接指定谁可以查看和引用变量.连锁有三种类型:内部连接,外部连接和无连接.
无链接
此变量仅在声明它的位置可见.通常适用于函数中声明的变量.
内部链接
此变量对文件中的所有函数(称为转换单元)都是可见的,但其他文件不会知道它存在.
外部链接
该变量对其他翻译单元可见.这些通常被认为是"全局变量".
下面是一个描述基于说明符的存储和链接特征的表
Storage Class Function File Specifier Scope Scope ----------------------------------------------------- none automatic static no linkage external linkage extern static static external linkage external linkage static static static no linkage internal linkage auto automatic invalid no linkage register automatic invalid no linkage