我知道这些类型的变量之间的区别是什么,但我想知道本地静态变量是否实际影响,或者可能以任何方式影响编译器的代码生成。
答案 0 :(得分:2)
在文件范围声明的静态变量与本地声明的静态变量具有相同的属性(除了范围,即标识符的可见区域)。两种都具有相同的存储持续时间。这两种都是在程序启动之前初始化的。
没有理由期望它们在代码生成方面表现不同。
作为旁注:静态变量不能在函数的内联定义中本地声明,但它与代码生成无关。
答案 1 :(得分:1)
首先,静态外部变量(即任何函数范围之外的静态变量)的范围受限于翻译单元。这与.c
文件不同。基本上,翻译单元是完成所有预处理并添加了每个.c
文件后的#include
文件。
静态局部变量与静态外部变量的不同之处在于,它只能从声明它的函数中引用。它与普通的局部变量明显不同之处在于它在函数调用中保留其值(如果您有兴趣,请向我索取一个片段来演示)。
这是否澄清了你心中的不同?