静态存储类说明符

使用 static 存储类说明符声明的对象具有 静态存储持续时间,这意味着当程序开始运行时将分配这些对象的内存,当程序终止时将释放这些对象的内存。 变量的静态存储持续时间与文件或全局作用域不同: 变量可以具有静态持续时间,但可以具有局部作用域。

仅限 C 关键词 是C语言中实现信息隐藏的主要机制。 static

仅限 C + + C++通过命名空间语言功能和类的访问控制来强制隐藏信息。 在声明名称空间作用域中的对象时,不推荐使用关键字 static 来限制外部变量的作用域。

static 存储类说明符可以应用于以下声明:
  • 数据对象
  • 仅限 C + + 班级成员
  • 匿名工会
不能将 static 存储类说明符与以下内容配合使用:
  • 类型声明
  • 函数参数

仅限 C 在 语言层面, 关键字可用于声明函数数组参数。 C99 static static 关键字指示传递到函数中的自变量是指向至少具有指定大小的数组的指针。 这样,编译器将被告知指针自变量从不为空。 请参阅 函数参数声明中的静态数组下标 (仅限 C) 以获取更多信息。

静态变量的链接

如果对象的声明包含 static 存储类说明符并具有文件作用域,那么 标识具有 内部链接。 因此,特定标识的每个实例仅表示一个文件中的同一对象。 如果对象的声明包含静态存储类说明符并具有函数作用域,那么将静态分配对象,并且所有函数调用都使用同一对象。 例如,如果在函数 f中声明了静态变量 x ,那么当程序退出 f的作用域时,不会破坏 x :
#include <stdio.h>

int f(void) {
  static int x = 0;
  x++;
  return x;
}

int main(void) {
  int j;
  for (j = 0; j < 5; j++) {
    printf("Value of f(): %d\n", f());
  }
  return 0;
}
以下是以上示例的输出:
Value of f(): 1
Value of f(): 2
Value of f(): 3
Value of f(): 4
Value of f(): 5
由于 xfunction local 静态变量,因此在连续调用 f时不会将其重新初始化为 0