Когда я изучал C с помощью Microsoft Visual Studio, он не позволял мне создавать массив непостоянного размера. Мне нужно было либо поставить значение вроде int arr[5];
, либо сделать #define size 5
и сделать int arr[size];
. Однако сегодня, используя Clion, я заметил, что он позволяет мне делать следующее:
#include <stdio.h>
int main()
{
printf("Enter a value: ");
int x;
scanf("%d", &x);
int arr2[x];
for (int i = 0; i < x; i++)
{
arr2[i] = i;
printf("Array at %d is %d.\n", i, arr2[i]);
}
return 0;
}
Этот код C компилируется и запускается без каких-либо проблем — никаких ошибок сегмента или чего-то еще. В чем дело? Является ли этот код допустимым C, и я только что изучил его в IDE, которая не позволяла это, или это недопустимый код C, и я просто использую плохой компилятор? На другом моем компьютере с Linux я даже установил GCC 7.2, и разрешен тот же синтаксис. Я не понимаю. Это проблема CLion, проблема CMake или проблема C lang?
Мой компилятор и CMake перечислены ниже. Спасибо.