什么是使用静态局部变量的时候,我们可以在同样的成本获得了一个全局变量?(What is the us

2019-08-19 10:46发布

在C,有什么用静态存储类,当外部变量可以在相同的成本即达到其目的。 既占据可执行文件的数据段的存储空间。

我有一个外部variable.If更好的范围,我想外部变量的范围是特定的文件我不声明where.i看到很多的灵活性,一个全局变量静态局部变量这个变量其他

我们可以参照当地静态变量函数外,如果我们有variable.Memory的局部静态变量的地址将不会在function.So独特功能的堆栈帧的数据段不静态存储类带来的表。

我只是想知道静态是否具有即时通讯不知道有任何细微的目的。

Answer 1:

你写一个全局变量有一个“更好”的范围。 这是不正确。 它有一个更大的范围。 更大并不好。

更大的可能是必要的,如果你需要一个标识符,以在更多的地方可见,但情况往往并非如此。 但更大的范围意味着更多的接触到的错误。 全局变量,更难看到他们使用什么程序状态和变化蒙混过关程序的语义,它增加所造成的未申报的本地标识符和其他错误,错误的概率。

特别是,与外部链接的标识符将与其他库标识符冲突。 考虑当你正在编写一个应用物理学会发生什么,有一个名为了外部标识acceleration ,并链接一个物理库也有一个名为了外部标识acceleration 。 该程序将失败。 正因为如此,外部标识符通常是不好的设计。

我们的开发和维护复杂的软件能力的显著限制是人为错误。 很多编程语言语义的限制 ,以防止错误的语言。 随着原始计算机,您可以添加两个指针,垃圾你的堆栈指针,一个偶然的字节加载float到整数寄存器,依此类推。 良好的编程语言使这些错误很难通过错误的事情。

全局变量是错误的大源之前作用域规则帮助控制它们。 优秀的程序员限制其标识的范围。



Answer 2:

全局变量是很好,全球性的,它可以从任何地方访问。

静态局部变量具有局部范围。 它是静态的,所以它横跨但它只能从局部范围内进行访问的应用程序生命周期的生命周期运行(即范围是一个功能,一个块或文件)



Answer 3:

基本区别是变量的范围。

1)全局变量是全球对整个项目。 让说你的项目有10个不同的文件,那么所有10个文件都可以访问全局变量(了解如何使用EXTERN)。

2)静态变量/功能可通过在其内它被定义函数/文件中使用。 它不能在项目中的任何其他文件中使用。

然而,可以通过使该变量的参考修改FUNC2静态变量(在func1的()定义)()。 请看下面的例子,

void func2(int *i)
{
    (*i)++;
}

void func1()
{
    static int i;

    i=1;
    printf("%d\n", i);
    func2(&i);
    printf("%d\n", i);  
}

int main()
{
    func1();
    return 0;
}

正如所看到的上面,func1的()具有static int i不能通过FUNC2(直接操作),但如果传递变量的参考仍然可以操纵像普通变量的变量。

希望能帮助到你...



Answer 4:

本地全球首要的区别是范围:你只能从他们所定义的块访问本地变量,而全局变量可以在任何地方进行访问。 因此,你只能在全球范围内给出名称的变量,但你可以在不同功能的多个局部静态变量。

与静态全局变量与EXTERN变量:是的,静态全局变量是本地的翻译单元(即他们所定义的.C源文件)。

因此,这里主要关注的是范围的概念,并存储在那里顺其自然。



Answer 5:

你应该使用本地静态变量的原因是范围,从而避免因为使用你就不能引用它,它是在中定义的功能之外的局部静态变量一些bug容易出现的情况。



Answer 6:

下面是这证明了差异短节目:

#include <stdio.h>

static int a=20;
void local()
{
   printf("%d,addr:%d \n", a, (void*)&a);
   a = 100;
}

int main()
{

      {
         static int a = 10;
         printf("%d,addr:%d \n", a, (void*)&a);
         local();
      }
      printf("%d addr:%d \n", a, (void*)&a);
}

输出:

10,addr:134518604   -- local static inside the braces
20,addr:134518600   -- this is referring the global static variable
100 addr:134518600  -- This is referring the global static variable which is outside of 
                       the braces.

这里牙套也很重要:如果在没有括号main()函数,那么它只是指局部静态变量。



文章来源: What is the use of Static local variable when we can get a global variable at the same cost?