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
我很高兴使用 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