为什么要在main中声明一个静态变量?
Why declare a static variable in main?
阅读别人的代码,我看到了语法上类似于此的内容:
int main(void) {
static int attr[] = {FOO, BAR, BAZ, 0};
/* ... */
}
这是一个错误还是有某种原因需要在 main
static
中声明一个变量?据我了解,static
会阻止链接并在调用之间保持价值。因为这里它在函数内部,所以它只执行后者,但是 main
只被调用一次,所以我不明白这一点。这是否会修改某些编译行为(例如,防止它被优化到不存在)?
static 还告诉编译器将数据存储在通常存储全局变量的内存的 .data 部分。您可以将其用于可能溢出堆栈的大型数组。
除非您正在做一些非常不标准的事情,例如直接调用 main
,否则在 main
中声明局部变量 static
没有什么意义。
然而,如果您在 main
中使用了一些对于堆栈而言太大的大型结构,它的用处是什么。然后,将变量声明为 static
意味着它位于数据段中。
static
也意味着,如果未初始化,变量将被初始化为全 0,就像全局变量一样。
阅读别人的代码,我看到了语法上类似于此的内容:
int main(void) {
static int attr[] = {FOO, BAR, BAZ, 0};
/* ... */
}
这是一个错误还是有某种原因需要在 main
static
中声明一个变量?据我了解,static
会阻止链接并在调用之间保持价值。因为这里它在函数内部,所以它只执行后者,但是 main
只被调用一次,所以我不明白这一点。这是否会修改某些编译行为(例如,防止它被优化到不存在)?
static 还告诉编译器将数据存储在通常存储全局变量的内存的 .data 部分。您可以将其用于可能溢出堆栈的大型数组。
除非您正在做一些非常不标准的事情,例如直接调用 main
,否则在 main
中声明局部变量 static
没有什么意义。
然而,如果您在 main
中使用了一些对于堆栈而言太大的大型结构,它的用处是什么。然后,将变量声明为 static
意味着它位于数据段中。
static
也意味着,如果未初始化,变量将被初始化为全 0,就像全局变量一样。