为什么在初始化C中常量长度的数组时,我被限制为任意小的(数组大小)

  • 本文关键字:数组 任意小 初始化 常量 c
  • 更新时间 :
  • 英文 :


注意:我在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或其他什么,但仍然困扰着我,为什么它能在一定长度上工作,但不能,但不能更高。

两个数组声明实际上都是可变长度的数组声明。尽管COUNTconst,但它在C中不是一个恒定的表达式。

但不管怎样,较大的大小只是超出了实现的限制,溢出了通常分配这些局部变量的调用堆栈。尽管我怀疑如果使用优化进行编译,这种行为会消失。编译器可以很容易地推断出代码片段中没有使用nums,并将其完全删除。

最新更新