在函数外部声明数组大小参数时,为什么不能将其作为变量?

时间:2018-10-02 13:01:29

标签: c

为什么在C99中不能在带有变量的函数外部声明数组作为大小参数?

例如,考虑以下代码片段。 这将导致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并不意味着常数。它的意思是“只读”,但是我不正确理解它的含义。 那么为什么数组不能从只读存储器中获取大小呢?

我知道可以使用#definesenum解决此问题,所以我对这种情况的解释更感兴趣。

1 个答案:

答案 0 :(得分:1)

C99 6.7.5.2/2数组声明符:

  

只有具有块作用域或函数原型作用域且没有链接的普通标识符(如6.2.3所定义)不得具有可变修改的类型。如果标识符被声明为具有静态存储持续时间的对象,则该标识符不得具有可变长度的数组类型。