当我尝试这个代码时它工作:
const int i = 5;
int main() {
int arry[i];
}
Run Code Online (Sandbox Code Playgroud)
即使这不起作用:
const int i = 5;
int arry[i];
int main() {
}
Run Code Online (Sandbox Code Playgroud)
我已经阅读了有关常量大小的数组的所有帖子,但我无法理解为什么arry在main中声明它有效.
这里的问题是const在C中不会产生真正的常量.
当你写的const int i = 5是一个只读变量而不是常量.在C99中,尺寸i为的数组是可变长度数组(VLA).VLA仅适用于堆栈分配的变量,因此您看到的编译错误.
如果需要具有全局范围的数组,则应切换到宏.
#define ARRAY_SIZE 5
int arry[ARRAY_SIZE];
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为5它是一个真正常量的文字.
实际上,即使是一个自动存储阵列(即堆栈分配的局部变量),您也应该避免使用VLA,因为它们会产生运行时开销.