c - 函数内部的静态数组错误 C

标签 c

static const int LOG_MAX = 31;
static int log_table[LOG_MAX];

此代码位于 C 语言的函数内部。当我尝试编译时出现错误:

"main.c:19:16: error: storage size of 'log_table' isn't constant".

我不明白这一点,因为 LOG_MAXconst

澄清一下,这是 C 代码,我使用的是 GCC。

最佳答案

在旧的 C 和 C++ 标准中,数组的数组边界必须是在编译时评估的常量文字。 const 变量不需要在编译时求值,它可以在运行时作为局部变量创建。此外,正如另一个答案所指出的, const 实际上应该被视为只读的,而不是其他任何东西。

在所有 C 和 C++ 标准中,static 数组必须始终使用常量文字设置其大小。 (或者挑剔一点,这适用于任何具有静态存储持续时间的变量)

然而,在较新的 C 标准(C99、C11)中,如果您省略 static 关键字,您发布的代码就完全没问题。然后它将创建一个可变长度数组 (VLA),这可能是也可能不是您想要的。

我不确定最新的 C++11 标准,但据我所知它不支持 VLA。

关于c - 函数内部的静态数组错误 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21045928/

相关文章:

ios - 如何在 iOS 中获得 C 函数崩溃?

c - 一些指针问题

c++ - Linux中共享对象和普通库的区别

c - "Error: parameter name omitted"并将输入文件作为参数传递

c - 如何在 C 中实现宏

c - C 中的字符串反转

c++ - 从文本文件中读取数字字节

c - 如何通过对结构中的名称使用 strcmp 将节点添加到列表中?

c - 有没有办法测试 fd_set 是否为 "nonzero"?

c - 在 C 中从文本文件中分割和修改字符串