编译静态局部变量和静态全局变量之间的差异

时间:2017-11-07 01:44:15

标签: c code-generation

我知道这些类型的变量之间的区别是什么,但我想知道本地静态变量是否实际影响,或者可能以任何方式影响编译器的代码生成。

2 个答案:

答案 0 :(得分:2)

在文件范围声明的静态变量与本地声明的静态变量具有相同的属性(除了范围,即标识符的可见区域)。两种都具有相同的存储持续时间。这两种都是在程序启动之前初始化的。

没有理由期望它们在代码生成方面表现不同。

作为旁注:静态变量不能在函数的内联定义中本地声明,但它与代码生成无关。

答案 1 :(得分:1)

首先,静态外部变量(即任何函数范围之外的静态变量)的范围受限于翻译单元。这与.c文件不同。基本上,翻译单元是完成所有预处理并添加了每个.c文件后的#include文件。

静态局部变量与静态外部变量的不同之处在于,它只能从声明它的函数中引用。它与普通的局部变量明显不同之处在于它在函数调用中保留其值(如果您有兴趣,请向我索取一个片段来演示)。

这是否澄清了你心中的不同?

相关问题