注意:我在C中见过,为什么能';常量变量是否可以用作数组大小的初始值设定项?已经,但这并不能完全回答我的问题(或者我还没有完全理解(。
这项工作:
int main() {
const long COUNT = 1048106;
int nums[COUNT];
return 0;
}
此崩溃:
int main() {
const long COUNT = 1048106000;
int nums[COUNT];
return 0;
}
我读到这实际上是对const
的不恰当使用(因为它意味着只读,而不是在编译时求值(。
所以我很乐意使用#define
或其他什么,但仍然困扰着我,为什么它能在一定长度上工作,但不能,但不能更高。
两个数组声明实际上都是可变长度的数组声明。尽管COUNT
是const
,但它在C中不是一个恒定的表达式。
但不管怎样,较大的大小只是超出了实现的限制,溢出了通常分配这些局部变量的调用堆栈。尽管我怀疑如果使用优化进行编译,这种行为会消失。编译器可以很容易地推断出代码片段中没有使用nums
,并将其完全删除。