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_MAX
是 const
。
澄清一下,这是 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/