我可以使用变量来声明数组的大小吗? C

时间:2014-10-25 14:57:41

标签: c arrays

我可以这样做吗?我认为你可以因为它有效,但我不确定它是否100%正确。

printf("Array size: ");
scanf("%d", &n);
int array[n]; // I know this only works with C99

2 个答案:

答案 0 :(得分:1)

可变长度数组严格来说是C99功能。像GCC和Clang这样的编译器允许它们用于C90(ansi和C89)模式以及C ++。例如,请参阅GCC docsClang docs。在使用VLA时,两个编译器都有可能提供或限制某些功能的警告或扩展。 GCC特定扩展的一个示例是以下代码,它不能在Clang中编译:

void tester (int len; char data[len][len], int len)
{
}

在两个编译器中,-pedantic将警告在标准模式下使用,其中VLA是非标准的。

在C11中,对可变长度数组的支持是可选的。 C11标准指定了一个“特征测试”宏,用于说明实现是否支持它们。

  

§6.7.6.2[...](可变长度数组是一个条件特征   实现不需要支持;见6.10.8.3。)

     

§6.10.8.3_ _STDC_NO_VLA_ _整数常量1,意图   表明该实现不支持变长   数组或可变修改的类型。

答案 1 :(得分:0)

是的,它适用于C-99和其他语言,如C ++

printf("Array size: ");
scanf("%d", &n);
int array[n];