gpt4 book ai didi

c - 关于 main 函数,全局变量和局部变量有什么区别?

转载 作者:行者123 更新时间:2023-11-30 20:02:59 25 4
gpt4 key购买 nike

虽然我知道局部变量和全局变量之间有什么区别,但我只是不明白它是否重要,特别是在谈论主函数内的局部变量时。例如,除了我们不能在其他函数中使用第二种情况下的 testvar 之外,这里有什么区别?

第一种情况:

#include <stdio.h>
int testvar;

第二种情况:

#include <stdio.h>
int main(void){
int testvar;
}

编辑:我的意思是,如果我只想在 main 中使用变量,那么将其声明为全局变量是否有任何优势,或者在这种特定情况下没有什么不同?

最佳答案

软件工程的良好实践是将名称的范围限制在它们的使用范围内。如果 testvarmain 外部声明,则它对 main 外部的代码可见。这会导致一些其他代码在打算使用其他对象时使用 testvar 的错误(另一个具有不同名称但输入错误的对象,或者具有相同名称但不同名称的对象)。需要它的实例)。此外,由于它是使用 int testvar; 声明的,而不是 static int testvar;,因此它将与其他模块中名为 testvar 的其他对象链接。这是一个严重的问题 - 某些例程的一位作者出于自己的目的使用了诸如 AmountOfMemory 之类的名称,而其他例程的另一位作者也出于自己的目的使用了相同的名称,并且这两段代码单独工作,但是当链接到同一个程序时,它们就会崩溃。因此,好的代码会避免全局变量。

如果 testvarmain 中声明,则不会发生这些错误。写出好程序的概率就增加了。因此,如果在 main 之外不需要(按名称)testvar,最好在 main 内部声明它。

还有一个生命周期的问题。与范围(名称可见)类似,我们更喜欢限制生命周期(当对象存在时)。对于在 main 内部定义的对象,其生命周期实际上与在任何函数外部声明的对象相同 - 它将在程序执行期间存在。所以生命周期在这里并不是一个大问题。然而,有一种情况确实如此。在C中,允许在函数内部调用main。这个很少用到。然而,如果使用它并且如果 testvar 定义在 main 之外,则只会有一个它的实例,并且 main 的所有执行都会分享它们。如果 testvar 定义在 main 内部,则 main 的每次执行都会有自己的 testvar 实例,与其他。

函数内部定义的对象与函数外部定义的对象之间的另一个区别是,C 默认情况下自动将函数外部定义的对象初始化为零。然而,这不会影响在何处定义对象的选择,因为可以根据需要提供显式初始化。

关于c - 关于 main 函数,全局变量和局部变量有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56778891/

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