![](/img/trans.png)
[英]Why am I being allowed to use a const qualified variable as an array size in C?
[英]Why am I limited to an arbitrary small ( array size when initializing an array with a const length in C?
注意:我已经在C中看到了,为什么不能将const变量用作数组大小的初始化程序? 已经,但这还不能完全回答我的问题(或者我没有完全理解它)。
这有效:
int main() {
const long COUNT = 1048106;
int nums[COUNT];
return 0;
}
这崩溃:
int main() {
const long COUNT = 1048106000;
int nums[COUNT];
return 0;
}
我已经读过,这实际上是对const
的不当使用(因为这意味着只读,在编译时不进行评估)。
因此,我很乐意使用#define
或诸如此类的东西,但是仍然令我感到困扰的是为什么它在一定长度下有效,但没有更高的效力。
您的两个数组声明实际上都是可变长度数组声明。 尽管是const
,但COUNT
在C中不是常量表达式。
但是无论如何,更大的大小只会超出实现的限制,从而使通常分配了这些本地资源的调用堆栈溢出。 尽管我怀疑这种行为在您进行优化时会消失。 编译器可以轻松推断出代码段中未使用nums
,并将其完全删除。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.