gpt4 book ai didi

c - 静态全局变量和函数内部静态变量的区别

转载 作者:太空宇宙 更新时间:2023-11-04 01:01:38 25 4
gpt4 key购买 nike

假设我有一个函数 void func() 并且我在该函数内部使用了变量 testVar。此外,我需要变量在离开函数后仍然存在。通常我会通过在函数 (1) 中使用静态变量来实现。但是,当我改用全局变量时,有什么区别 (2)?

static int testVar = 0; //global variable instead(2)

void func()
{
static int testVar = 0; //static variable inside of the function(1)

if(testVar++){
//do something
}
}

编译器在这两种情况下具体做了什么?如果变量只在 func() 中需要,是否存在我应该使用 method(2) 的场景?

最佳答案

唯一的区别是,当变量在函数内部声明时,它只对那个函数有局部作用域。尽可能缩小变量的范围始终是一个好习惯,因此如果可能的话,您应该这样做。

尽管有时在实现 ADTs 时和类似的模块,你希望一个局部变量可以被多个函数访问。在这种情况下,您可以在文件范围内声明它。

在某些情况下,将变量放在文件范围内是一种糟糕的编程习惯,因为它会使代码更难阅读和维护。这与为什么全局变量被认为是坏的是同一个问题,即使静态文件范围变量不是全局的(它对整个程序不可见)。

在其他情况下,最值得注意的是嵌入式系统,其中只有您正在编写的“类”的一个实例(单例),然后使用文件范围静态变量是一种常见的做法,作为一种穷人进行私有(private)封装的方式。

关于c - 静态全局变量和函数内部静态变量的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36447170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com