为什么在main中声明一个静态变量?

时间:2016-07-19 15:25:48

标签: c static main

阅读其他人的代码,我看到了与语法类似的东西:

int main(void) {
    static int attr[] = {FOO, BAR, BAZ, 0};
    /* ... */
}

这是错误还是有理由在main static中声明变量?据我所知,static可以防止链接并保持调用之间的价值。因为它在函数内部只执行后者,但main只调用一次,所以我没有看到这一点。这是否会修改某些编译行为(例如,防止其优化不存在)?

2 个答案:

答案 0 :(得分:7)

除非你做一些非标准的事情,比如直接调用main,否则在static中声明局部变量main几乎没有意义。

然而,如果你在main中使用了一些对于堆栈而言太大的大型结构,它会有用。然后,将变量声明为static表示它存在于数据段中。

成为static也意味着,如果未初始化,变量将使用全0来初始化,就像全局变量一样。

答案 1 :(得分:6)

static还告诉编译器将数据存储在通常存储全局变量的内存的.data部分中。您可以将此用于可能溢出堆栈的大型数组。