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

neb*_*uch 10 c static program-entry-point

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

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

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

dbu*_*ush 7

除非你正在做的事情非常不标准,如调用main直接,有一个在声明局部变量的小点staticmain.

然而,它有用的是,如果你使用的某些大型结构main对于堆栈来说太大了.然后,将变量声明为static意味着它存在于数据段中.

作为static也意味着,如果未初始化变量将与所有0的初始化,就像全局.


cle*_*anc 6

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

  • `.bss`仅用于默认初始化数据(仅限零).非零全局变量转到`.data`. (5认同)