c中的可变长度数组和静态声明

时间:2016-12-28 16:19:21

标签: c

为什么C中的变长数组不能声明为静态? 例如,不允许此声明:

static char str1[lengthOfaString];

1 个答案:

答案 0 :(得分:6)

当应用于本地标识符时,static关键字指定该标识符指定的对象具有静态存储持续时间。这意味着在评估任何非常量表达式之前,该对象存在于程序的整个生命周期中。

根据定义,当控件到达数组声明时,可变长度数组的长度由在运行时计算的表达式指定。系统无法为这样的对象提供静态存储持续时间,因为它在对象必须已经存在之后的某个时间才知道对象的大小。

另请注意,所有文件范围变量都具有静态存储持续时间,因此无法在文件范围内声明VLA。实际上,在文件范围内,static关键字与存储持续时间无关;相反,在该上下文中,它指定内部链接