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

如何在MS Visual C ++中启用VLA,C99中定义的可变长度数组,或者根本无法使用?

是的,我知道C ++标准基于C89,并且VLA在C89标准中不可用,因此在C ++中不可用,但是MSVC ++也应该是C编译器,可以使用/ TC编译器参数(Compile as C Code (/TC))。但是这样做似乎并不能启用VLA,并且在编译时与C ++(Compile as C++ Code (/TP))一样,编译过程将失败,并出现相同的错误。也许MSVC ++ C编译器仅符合C89,或者我缺少某些内容(某些特殊构造或编译指示/定义)?

代码示例:

#include <stdlib.h>int main(int argc, char **argv){
  char pc[argc+5];

  /* do something useful with pc */

  return EXIT_SUCCESS;}

编译错误:

错误C2057:预期常量表达式

错误C2466:无法分配大小恒定为0的数组

错误C2133:“ pc”:未知大小


浮云间
浏览 924回答 3
3回答

慕后森

我遇到了同样的问题,这在MS Visual C ++ 2015中是不可能的,相反,您可以使用vector进行几乎相同的操作,唯一的区别是堆资源管理例程(新/删除)的开销可忽略不计。虽然VLA很方便,但是要从堆栈中分配不确定的内存量却有堆栈溢出的风险,通常不是一个好主意。
打开App,查看更多内容
随时随地看视频慕课网APP