c - 可变长度的静态数组

标签 c constants static-array

以下是否合法?

const int n=10;
static int array[n];

如果是,那么为什么以及如何?

最佳答案

请注意,在 C 语言中,const 对象不符合常量 的条件。它们不能用于构建常量表达式。在您的代码示例中,n 不是 C 语言术语中的常量。表达式 n 不是 C 中的整型常量表达式。

(有关详细信息,请参阅 "static const" vs "#define" vs "enum"Why doesn't this C program compile? What is wrong with this?。)

这立即意味着您对 array 的声明是试图声明一个可变长度数组。可变长度数组只允许作为自动(本地)对象。一旦你用静态存储持续时间声明你的数组,大小必须是一个整数常量表达式,即编译时常量。您的 n 不符合条件。声明不合法。

这就是为什么在 C 语言中我们主要使用 #define 和/或 enum 来引入命名常量而不是 const 对象的原因.

关于c - 可变长度的静态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26311364/

相关文章:

Java:通用静态多维数组

.net - Objective C 真的编译了吗?它不是更像 Visual Basic/.NET 运行时吗?那么是什么阻止它移植到其他平台呢?

c++ - 为什么是 0022FF08 + sizeof(int) = 0022FF0C 而不是 0022FF0A?

c - 说服编译器在循环外设置寄存器

c - 在 C 中将 func(const void *) 赋值给 func(void *)

static - 静态数组的展开循环

c - 如何测量我的全局变量的总大小?

c++ - 在 C++ 中使用非常量引用作为 const

c++ - 为什么允许我为包含常量指针的 vector 分配新地址?

带有静态数组的java空指针异常