gpt4 book ai didi

c - 文件中的全局静态变量与函数中的局部静态变量具有可比性吗?

转载 作者:行者123 更新时间:2023-11-30 19:57:57 24 4
gpt4 key购买 nike

我知道将全局变量声明为 STATIC 会使其对当前文件可见。每次在文件中调用函数时,变量是否都会保留其数据?

例如,

假设下面某个文件调用 func1(),它修改静态全局变量数据,然后调用 func2() 再次修改它。

下次文件调用 func1() 时,它会修改新的数据变量结构吗?或者它会保留在第一次调用中修改的先前数据吗?

STATIC MY_DATA  Data1;

void func1( ){
//modify Data1
func2(Data1);
}

void func2 (MY_DATA data){
// modify data
}

最佳答案

关键字static在文件范围内的含义与在本地范围内的含义不同。

在文件范围内,static 声明内部链接。这意味着只有同一翻译单元中的其他代码才能看到声明的变量(或函数);如果相同的名称出现在不同的文件中,则它指定一个单独的变量(函数)。相反的是外部链接,您可以通过 extern 关键字显式声明它。此外,在函数作用域内声明的变量没有链接——它们只能在声明它们的函数内访问。

另一方面,在本地范围内,static 声明静态存储持续时间,而不是默认的自动持续时间。与具有自动持续时间的变量不同,具有静态持续时间的变量在程序启动时初始化,并在函数调用期间保留其值。

在文件范围内声明的所有变量和所有函数都具有静态持续时间,因此尽管可能会造成混淆,但在不同的上下文中为这两个不同的目的使用相同的关键字并没有本质上的歧义。

对于您的示例,无论您的文件范围变量是否声明为静态,它都具有静态存储持续时间。因此,它的值将在函数调用之间保持不变,并且同一文件中的所有函数都可以随时访问其当前值。如果它声明为静态,那么它也可以被其他函数访问。

关于c - 文件中的全局静态变量与函数中的局部静态变量具有可比性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34637035/

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