为什么C中的变长数组不能声明为静态? 例如,不允许此声明:
static char str1[lengthOfaString];
答案 0 :(得分:6)
当应用于本地标识符时,static
关键字指定该标识符指定的对象具有静态存储持续时间。这意味着在评估任何非常量表达式之前,该对象存在于程序的整个生命周期中。
根据定义,当控件到达数组声明时,可变长度数组的长度由在运行时计算的表达式指定。系统无法为这样的对象提供静态存储持续时间,因为它在对象必须已经存在之后的某个时间才知道对象的大小。
另请注意,所有文件范围变量都具有静态存储持续时间,因此无法在文件范围内声明VLA。实际上,在文件范围内,static
关键字与存储持续时间无关;相反,在该上下文中,它指定内部链接。