4.6 静态变量

Static Variables

书中讲解 static 的篇幅很短就半页,讲解了几条 rules 理解起来稍有难度。 本节会从三个部分去讲解 static,这些笔记写于 2023 年 9 月,于 2024 年 1 月 20 日进行整理。

注意:declaration 声明

4.6.1 static 声明局部变量

static 修饰局部变量的时候,局部变量出了作用域不销毁。static 修饰局部变量的时候,实质上是改变了变量的存储位置。

static 的实质是改变存储位置,来影响变量的生命周期。 使用 static 修饰的时候,变量会直接放到静态区,就是在创建的时候就会存到静态区。

static 不会反复执行,a 的位置也不会改变。

上述都看不到,static 的汇编代码。

4.6.2 static 和 extern 声明全局变量的区别

  1. extern

  • 当你在一个源文件中使用 extern 关键字来声明一个全局变量时,它表示该变量是在其他源文件中定义的,而不是在当前文件中定义的。

  • 它用于引用其他文件中定义的全局变量,使得这个全局变量在当前文件中可见。

  • 通过 extern 声明的全局变量只是引用,不分配内存空间。实际的内存分配发生在定义该全局变量的文件中。

  1. static

  • 当你在一个源文件中使用 static 关键字来声明一个全局变量时,它表示该变量只能在当前文件中访问,其他文件无法访问或引用它。

  • static 全局变量在全局变量区分配内存空间,但其作用域被限制在当前文件内,不会被其他文件看到。

总结:

  • extern 用于声明其他文件中定义的全局变量,使其在当前文件可见。

  • static 用于限制全局变量的作用域,使其只在当前文件内可见。

这两者的选择取决于你的需求。如果你需要在多个文件中共享全局变量,使用 extern 来声明它,而在其中一个文件中定义它。如果你想限制全局变量的作用域,使其仅在当前文件内可见,使用 static

4.6.3 static 声明函数

  • static 关键字控制文件内可见性和生命周期。

  • extern 关键字使对在其他文件中定义的实体的访问成为可能

以下是 extern demo:

使用 gcc 命令进行编译:

OUT:

Last updated

Was this helpful?