在MS Visual C ++中启用VLAs(可变长度数组)?

我怎样才能使用在Visual C ++中定义的VLA,可变长度的数组,如C99,或者根本不可能?

是的,我知道C ++标准是基于C89的,并且在C89标准中没有可用的VLA,因此在C ++中是不可用的,但MSVC ++也应该是C编译器,也可以使用/ TC编译参数( Compile as C Code (/TC) )。 但是这样做似乎并没有启用VLA,编译过程在编译为C ++( Compile as C++ Code (/TP) )时也会出现相同的错误。 也许MSVC ++ C编译器只是C89兼容或我缺less的东西(一些特殊的结构或编译/定义)?

代码示例:

 #include <stdlib.h> int main(int argc, char **argv) { char pc[argc+5]; /* do something useful with pc */ return EXIT_SUCCESS; } 

编译错误:

错误C2057:预期的常量expression式

错误C2466:不能分配一个常量大小为0的数组

错误C2133:'pc':未知的大小

MSVC不是C99编译器,不支持可变长度数组。

https://docs.microsoft.com/en-us/cpp/c-language/ansi-conformance上; MSVClogging为符合C90。

VLA的写法比较简单,但是当std::vector的dynamic内存分配过大时,你可以使用alloca()来获得类似的行为。

http://msdn.microsoft.com/en-us/library/x9sx5da1.aspx

在你的例子中使用alloca()会给:

 #include <stdlib.h> #include <alloca.h> int main(int argc, char **argv) { char* pc = (char*) alloca(sizeof(char) * (argc+5)); /* do something useful with pc */ return EXIT_SUCCESS; }