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

Amj*_*jad -1 c

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

static char str1[lengthOfaString];
Run Code Online (Sandbox Code Playgroud)

Joh*_*ger 6

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

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

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