C使用作用域、链接和存储时期来定义5种存储类。
作用域分为:代码块作用域、函数原型作用域、文件作用域
链接分为:外部链接(没有使用static定义的文件作用域变量)、内部链接(使用static定义的文件作用域变量)、空链接(具有代码块作用域或函数原型作用域的变量)
存储时期分为:静态存储时期(具有文件作用域的变量)和自动存储时期(具有代码块作用域的变量)
所以存储类分为:自动、寄存器、具有代码块作用域的静态、具有外部链接的静态、具有内部链接的静态
存储类 时期 作用域 链接 声明方式
自动 自动 代码块 空 代码块内
寄存器 自动 代码块 空 代码块内,使用关键字register
具有空链接的静态静态代码块空 代码块内,使用关键字static
具有外部链接的静态静态文件外部 所有函数之外
具有内部链接的静态静态文件内部 所有函数之外,使用关键字static
此外,还有基于指针的第6种存储模型
这5种存储类不仅可以运用在变量上,还可以运行在函数上。
函数也具有存储类。函数默认情况下是外部的,用static声明后就成为了内部的(只能在包含它的文件中使用),此外,还有第三种可能性,那就是内联函数。
所以函数的声明有如下的方式:
int test();
static int test();
extern int test();