C静态变量初始化

C static variables initialization

我学了一些 C 语言,看到了对静态变量的解释。 他们展示了这段代码:

#include<stdio.h>
int fun()
{
  static int count = 0;
  count++;
  return count;
}
  
int main()
{
  printf("%d ", fun());
  printf("%d ", fun());
  return 0;
}

我不明白为什么调用函数两次就可以了,因为行

static int count = 0;

实际上运行了两次... 我不明白这怎么可能... 你真的可以声明它两次还是编译器第二次忽略它?

static 变量在程序启动时初始化,而不是每次调用函数时都初始化。

This (statics/globals) 是初始化定义真正 不同于未初始化定义后跟赋值的地方。 从历史上看,前者甚至曾经有不同的语法 (int count /*no '=' here*/ 0;)。

当你这样做时:

int fun() {
  static int count = 0;
  //...
}

那么除了 count 的不同范围(但不是生命周期)外,它等同于:

static int count = 0; //wider scope, same lifetime
int fun() {
  
  //...
}

在这两种情况下,静态变量在加载时初始化,通常与可执行文件中的其他静态变量和全局变量一起初始化。

... because the line static int count = 0; actually runs twice.

没有。就一次,就在调用 main() 之前。