4.6 静态变量
Last updated
Was this helpful?
Last updated
Was this helpful?
Static Variables
书中讲解 static 的篇幅很短就半页,讲解了几条 rules 理解起来稍有难度。 本节会从三个部分去讲解 static,这些笔记写于 2023 年 9 月,于 2024 年 1 月 20 日进行整理。
注意:declaration 声明
static 修饰局部变量的时候,局部变量出了作用域不销毁。static 修饰局部变量的时候,实质上是改变了变量的存储位置。
static 的实质是改变存储位置,来影响变量的生命周期。 使用 static 修饰的时候,变量会直接放到静态区,就是在创建的时候就会存到静态区。
static 不会反复执行,a 的位置也不会改变。
上述都看不到,static 的汇编代码。
extern
:
当你在一个源文件中使用 extern
关键字来声明一个全局变量时,它表示该变量是在其他源文件中定义的,而不是在当前文件中定义的。
它用于引用其他文件中定义的全局变量,使得这个全局变量在当前文件中可见。
通过 extern
声明的全局变量只是引用,不分配内存空间。实际的内存分配发生在定义该全局变量的文件中。
static
:
当你在一个源文件中使用 static
关键字来声明一个全局变量时,它表示该变量只能在当前文件中访问,其他文件无法访问或引用它。
static
全局变量在全局变量区分配内存空间,但其作用域被限制在当前文件内,不会被其他文件看到。
总结:
extern
用于声明其他文件中定义的全局变量,使其在当前文件可见。
static
用于限制全局变量的作用域,使其只在当前文件内可见。
这两者的选择取决于你的需求。如果你需要在多个文件中共享全局变量,使用 extern
来声明它,而在其中一个文件中定义它。如果你想限制全局变量的作用域,使其仅在当前文件内可见,使用 static
。
static 关键字控制文件内可见性和生命周期。
extern 关键字使对在其他文件中定义的实体的访问成为可能
以下是 extern demo:
使用 gcc 命令进行编译:
OUT: