Kaw*_*iKx 9 c global-variables variable-length-array
如何将可变长度数组声明为全局变量?
当在扫描长度之前在函数中声明可变长度数组时,它会编译但不会运行.它给出了分段错误.当相同的声明语句转移到扫描语句下方时,它运行正常.
如果我们想要一个可变长度数组全局可用于所有函数,我们该怎么做?这里的问题是数组的长度只能通过某些函数进行扫描.
你不能那样做。该标准草案的内容如下:
6.7.6.2 数组声明符
2 如果标识符被声明为具有可变修改类型,则它应是普通标识符(如 6.2.3 中定义),没有链接,并且具有块作用域或函数原型作用域。如果标识符被声明为具有静态或线程存储持续时间的对象,则它不应具有可变长度数组类型。
还,
10 示例 4 所有可变修改 (VM) 类型的声明都必须位于块作用域或函数原型作用域中。使用 _Thread_local、static 或 extern 存储类说明符声明的数组对象不能具有可变长度数组 (VLA) 类型。但是,使用静态存储类说明符声明的对象可以具有 VM 类型(即指向 VLA 类型的指针)。最后,用 VM 类型声明的所有标识符都必须是普通标识符,因此不能是结构或联合的成员。