Я читал, что C89 не поддерживает массивы переменной длины, но следующий эксперимент, кажется, что опровергать:Массивы переменной длины в C89?
#include <stdio.h>
int main()
{
int x;
printf("Enter a number: ");
scanf("%d", &x);
int a[x];
a[0] = 1;
// ...
return 0;
}
Когда я компилирую как таковой (предполагается, что имя файла является va_test.c
):
gcc va_test.c -std=c89 -o va_test
Это работает ...
Что мне не хватает? :-)
Я не верю тебе. '-std = c89' также запрещает инструкции перед объявлениями переменных, которые имеют ваш код, поэтому возникла бы ошибка компилятора, если вы действительно скомпилированы с помощью' -std = c89'. По умолчанию используется '-std = gnu90', который поддерживает vlas и множество других расширений языка C89/C90. –
@R. GCC 4.3.4 (это то, что у меня есть), доволен переменными, но не любит комментарии '//'. Мне не совсем ясно, является ли '// ...' дословным из реального кода опроса, или он предназначен как элиция. Я бы подумал об этом. –
Нечетные. Я думаю, это зависит от версий gcc, и я не пробовал это некоторое время. –