为什么要在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,就像全局变量一样。