C编译静态局部变量和静态全局变量的区别
C difference between compilation of static local variable and static global variable
我知道这些类型的变量之间的区别是什么,但我想知道将静态变量设置为局部变量是否真的会影响或可能以任何方式影响编译器的代码生成。
在文件范围内声明的静态变量与在本地声明的静态变量具有相同的属性(除了它们的范围,即标识符的可见区域)。两种类型具有相同的存储期限。两种都在程序启动前初始化。
没有理由期望它们在代码生成方面表现不同。
附带说明:静态变量不能在函数的内联定义中局部声明,但它与代码生成无关。
首先,静态外部变量(即任何函数范围之外的静态变量)的范围仅限于它们的翻译单元。这与 .c
文件不同。基本上,翻译单元是完成所有预处理并添加每个 #include
文件后的 .c
文件。
静态局部变量与静态外部变量的不同之处在于,它只能在声明它的函数内引用。它与普通局部变量的显着不同还在于它在函数调用中保留其值(如果您有兴趣,请向我索取片段来演示)。
这是否阐明了您心中的差异?
我知道这些类型的变量之间的区别是什么,但我想知道将静态变量设置为局部变量是否真的会影响或可能以任何方式影响编译器的代码生成。
在文件范围内声明的静态变量与在本地声明的静态变量具有相同的属性(除了它们的范围,即标识符的可见区域)。两种类型具有相同的存储期限。两种都在程序启动前初始化。
没有理由期望它们在代码生成方面表现不同。
附带说明:静态变量不能在函数的内联定义中局部声明,但它与代码生成无关。
首先,静态外部变量(即任何函数范围之外的静态变量)的范围仅限于它们的翻译单元。这与 .c
文件不同。基本上,翻译单元是完成所有预处理并添加每个 #include
文件后的 .c
文件。
静态局部变量与静态外部变量的不同之处在于,它只能在声明它的函数内引用。它与普通局部变量的显着不同还在于它在函数调用中保留其值(如果您有兴趣,请向我索取片段来演示)。
这是否阐明了您心中的差异?