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()
之前。
我学了一些 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()
之前。