我可以这样做吗?我认为你可以因为它有效,但我不确定它是否100%正确。
printf("Array size: ");
scanf("%d", &n);
int array[n]; // I know this only works with C99
答案 0 :(得分:1)
可变长度数组严格来说是C99功能。像GCC和Clang这样的编译器允许它们用于C90(ansi和C89)模式以及C ++。例如,请参阅GCC docs和Clang 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];