C - 编译器允许的语法无效?

时间:2017-09-23 03:27:57

标签: c cmake clion

当我使用Microsoft Visual Studio学习C时,它不允许我创建一个非常大小的数组。我必须输入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如下所示。感谢。

enter image description here

1 个答案:

答案 0 :(得分:7)

这是有效的C.它被称为可变长度数组(VLA)。该功能作为C99标准的一部分添加到语言中。

众所周知,MSVC不支持许多C99及更高版本的功能,包括VLA。