【发布时间】:2018-10-02 13:01:29
【问题描述】:
为什么不能在 C99 中以变量作为大小参数的函数外部声明数组?
例如,考虑这个代码 sn-p。
这会导致 error: variably modified ‘matrix’ at file scope 编译错误。
static int const height = 5;
static int const width = 5;
static int const matrix[height][width] = { ... };
int main(void){ ... }
我知道 c 中的 const 并不意味着常量。它的意思是“只读”,但我不明白这有什么含义。 那么为什么数组不能从只读内存中获取它们的大小呢?
【问题讨论】:
-
您需要使用 C 1999 吗?如果您对使用 C 1999 没有特定要求,您应该更喜欢该标准的最新版本,即现在的 2018 版本。
-
因为这是 C 的定义方式。该语言有一个繁琐的旧规则,即数组大小(在文件范围内)必须是 整数常量表达式,这反过来又限制了您可以用作数组大小的内容。它被视为一个语言错误。 C++ 已经修复了这个错误,C 没有。
-
@EricPostpischil,是的,这个项目需要 C99。
-
考虑比
const更严格的含义,即“只读”。const表示尝试更改是UB。它可以“工作”。鉴于此,static int const matrix[height][width]不代表具有static int const height = 5的固定大小数组。为了使matrix[height][width]成为固定大小,height必须是常量,而const没有指定。
标签: c