gpt4 book ai didi

c - 为什么在 C 中初始化具有 const 长度的数组时,我被限制为任意小的 ( 数组大小?

转载 作者:太空宇宙 更新时间:2023-11-04 06:49:30 25 4
gpt4 key购买 nike

注:我看过In C, why can't a const variable be used as an array size initializer?已经,但这并不能完全回答我的问题(或者我没有完全理解它)。

这个有效:

int main() {
const long COUNT = 1048106;
int nums[COUNT];
return 0;
}

这会崩溃:

int main() {
const long COUNT = 1048106000;
int nums[COUNT];
return 0;
}

我读到这实际上是对 const 的不恰当使用(因为它意味着只读,不在编译时求值)。

所以我很乐意使用 #define 或诸如此类的东西来代替,但仍然让我感到困扰的是,为什么这在某些长度上有效,但在更长的时间内却不起作用。

最佳答案

你的两个数组声明实际上都是 variable length array声明。 COUNT 不是 C 中的常量表达式,尽管它是 const

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

关于c - 为什么在 C 中初始化具有 const 长度的数组时,我被限制为任意小的 ( 数组大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53465543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com