【发布时间】:2016-11-22 14:16:23
【问题描述】:
阅读别人的代码,我看到了一些语法类似的东西:
int main(void) {
static int attr[] = {FOO, BAR, BAZ, 0};
/* ... */
}
这是一个错误还是有一些理由在mainstatic 中声明一个变量?据我了解static 防止链接并保持调用之间的值。因为这里它在一个函数内部,它只执行后者,但main 只被调用一次,所以我不明白这一点。这是否会修改某些编译行为(例如,防止它被优化而不再存在)?
【问题讨论】:
-
IIRC
static变量被放置在不同的部分。另请参阅:stackoverflow.com/questions/93039/… -
虽然这可能是不好的做法,但是,正式地,谁阻止您(或其他人)递归调用
main(稍后在代码中)? -
static表示变量未分配在栈中(存储在数据段或BSS段中)。 -
尝试分配没有静态的大数组:
int arr[100000000];,看看会发生什么。 -
@user975989:请说明标准中的部分! IIRC 它与 C 完全相反(这并不意味着它是推荐的做法)。 C++ 不允许递归调用
main,但那是一种不同的语言。