CLion 和 C99 标准不可能使用可变长度数组?

Variable length arrays not possible w CLion and C99 Standard?

我很高兴使用 CLion 编写代码,在使用 C99 标准的同时为大学创建一个项目。从今天开始,数组声明的可变长度将不起作用。有谁知道为什么? 代码:

int main() {
    // to allow debugging with CLION
    setbuf(stdout, 0);
    int number = 5;
    int myarray[number];
    return 0;
}

CMakeLists.txt

project(PG1 C)

set(CMAKE_C_STANDARD 99)

add_executable(PG1 main.c ...)

错误是:

C:\...\PG1\main.c(10): error C2057: Constant value required
C:\...\PG1\main.c(10): error C2466: Declaration of array with constant size 0 not possible
C:\...\PG1\main.c(10): error C2133: "myarray": unknown size
NMAKE : fatal error U1077: "C:\PROGRA~2\MICROS~219\BUILDT~1\VC\Tools\MSVC27~1.291\bin\Hostx86\x86\cl.exe": Return-Code "0x2"
Stop.
NMAKE : fatal error U1077: ""C:\Program Files (x86)\Microsoft Visual Studio19\BuildTools\VC\Tools\MSVC.27.29110\bin\HostX86\x86\nmake.exe"": Return-Code "0x2"
Stop.
NMAKE : fatal error U1077: ""C:\Program Files (x86)\Microsoft Visual Studio19\BuildTools\VC\Tools\MSVC.27.29110\bin\HostX86\x86\nmake.exe"": Return-Code "0x2"
Stop.
NMAKE : fatal error U1077: ""C:\Program Files (x86)\Microsoft Visual Studio19\BuildTools\VC\Tools\MSVC.27.29110\bin\HostX86\x86\nmake.exe"": Return-Code "0x2"
Stop.

CLion 使用 MS Visual Studio 2019 作为底层编译器。 MSVC 不是完全兼容的 C 编译器,特别是它不支持可变长度数组。

您必须使用 gcc 或 clang 才能获得对 VLA 的支持。

As of today variable lengths for array declaration won`t work. Does anyone have any ideas why?

OP 的编译器不兼容 C99(首先指定 Variable-length_array - VLA 支持),不兼容可选支持 VLA 的更高版本,编译器也没有将其作为扩展启用。

is there any way how i can verify the compiler version?

代码可以测试各种宏以查看编译器版本是否支持 VLA。

#if defined __STDC__ && defined __STDC_VERSION__ && (__STDC_VERSION__ == 199901)
  #define VLA_SUPPORTED 1
#elif defined __STDC__ && defined __STDC_VERSION__  && (__STDC_VERSION__ >= 201112)  && \
    (__STDC_NO_VLA__ != 1)
  #define VLA_SUPPORTED 1
#else 
  #define VLA_SUPPORTED 0
#endif