当我们以相同的代价获得全局变量时,静态局部变量的用途是什么?

Adi*_*Adi 9 c static extern storage-class-specifier

在C中,当外部变量以相同的成本服务于其目的时,静态存储类的用途是什么.两者都占用了可执行文件数据段中的存储空间.

我有更好的外部变量范围.如果我希望外部变量的范围是特定文件我不要声明这个变量else where.i看到很多灵活性与全局变量静态局部变量

如果我们有变量的地址,我们可以引用函数外部的局部静态变量.本地静态变量的存储将在数据段中不在函数的堆栈框架中.所以静态存储类带来的独特特性表.

我只是想知道静态是否有任何我不知道的微妙目的.

Eri*_*hil 26

您写道全局变量具有"更好"的范围.这是不正确的.它的范围更广.更大不是更好.

如果您需要在更多地方可以看到标识符,则可能需要更大,但通常情况并非如此.但更大的范围意味着更多的错误.全局变量通过使用更难以查看它们使用和更改的程序状态来混淆例程的语义,并且它增加了由于未能声明本地标识符和其他错误而导致的错误的可能性.

特别是,具有外部链接的标识符将与其他库中的标识符冲突.考虑一下编写物理应用程序时所发生的情况,具有一个名为的外部标识符acceleration,并链接到一个物理库,该物理库也有一个名为的外部标识符acceleration.该计划将失败.因此,外部标识符通常是糟糕的设计.

我们开发和维护复杂软件的能力的一个重大限制是人为错误.许多编程语言语义限制了语言以防止错误.使用原始计算机,您可以添加两个指针,删除堆栈指针,意外地将a的字节加载float到整数寄存器中,依此类推.良好的编程语言使得这些错误很难被误解.

在确定规则有助于控制它们之前,全局变量是更大的错误来源.优秀的程序员限制其标识符的范围.


msa*_*sam 6

全局变量很好,全局变量,可以从任何地方访问.

静态局部变量具有局部范围.它是静态的,因此它的生命周期在应用程序的生命周期中运行,但它只能从本地作用域访问(无论该作用域是函数,块还是文件)

  • 是的,如果您有内存地址,那么您可以访问,但这不适用于任何变量吗?即使使用本地非静态变量,您也可以从另一个线程访问内存位置.该语言提供静态,以便您可以限制该变量的范围而不是特定内存位置 (3认同)