C99下是否合法: void func(int var){static int arr[var];}
时间: 2023-12-13 13:02:32 浏览: 67
在C99标准下,使用形参定义静态数组的长度是不合法的。因此,`void func(int var){static int arr[var];}`是不合法的代码。
在C语言中,静态存储期的变量必须在编译时就确定其大小,而形参在编译时是不确定的,因此不能用来定义静态数组的长度。如果需要创建静态数组,可以使用常量或枚举常量来定义其长度,或者使用动态内存分配函数(如`malloc`)在运行时分配数组的内存空间。
需要注意的是,C11标准已经将可变长度数组(VLA)从标准中删除了,但静态数组的长度仍然不能使用形参来定义。
相关问题
C99下是否合法: void func(int var){int arr[var];}
在C99标准下,可以使用形参来定义数组的长度,因此`void func(int var){int arr[var];}`是合法的代码。
这种定义数组长度的方式也属于变长数组(Variable Length Array, VLA)。在函数调用时,实参的值会传递给形参`var`,然后编译器会根据形参`var`的值来确定数组`arr`的长度。需要注意的是,VLA只能定义在函数内部,不能定义在函数外部或作为全局变量。
需要注意的是,C11标准已经将VLA从标准中删除了,因此在C11及其之后的标准中,将不能使用VLA。
C99下是否合法:int var=10;int arry[var]
在C99标准下,可以使用变量来定义数组的长度。因此,`int var=10; int arry[var];`是合法的代码。
这种定义数组长度的方式称为变长数组(Variable Length Array, VLA)。在编译时,编译器会根据变量`var`的值来确定数组`arry`的长度。需要注意的是,VLA只能定义在函数内部,不能定义在函数外部或作为全局变量。
需要注意的是,C11标准已经将VLA从标准中删除了,因此在C11及其之后的标准中,将不能使用VLA。
阅读全文