阅读其他人的代码,我看到了与语法类似的东西:
int main(void) {
static int attr[] = {FOO, BAR, BAZ, 0};
/* ... */
}
这是错误还是有理由在main
static
中声明变量?据我所知,static
可以防止链接并保持调用之间的价值。因为它在函数内部只执行后者,但main
只调用一次,所以我没有看到这一点。这是否会修改某些编译行为(例如,防止其优化不存在)?
答案 0 :(得分:7)
除非你做一些非标准的事情,比如直接调用main
,否则在static
中声明局部变量main
几乎没有意义。
然而,如果你在main
中使用了一些对于堆栈而言太大的大型结构,它会有用。然后,将变量声明为static
表示它存在于数据段中。
成为static
也意味着,如果未初始化,变量将使用全0来初始化,就像全局变量一样。
答案 1 :(得分:6)
static还告诉编译器将数据存储在通常存储全局变量的内存的.data部分中。您可以将此用于可能溢出堆栈的大型数组。