Visual Studio 2013赢得';编译C数组声明

Visual Studio 2013赢得';编译C数组声明,c,arrays,visual-studio,visual-studio-2013,variable-length-array,C,Arrays,Visual Studio,Visual Studio 2013,Variable Length Array,我读过多篇关于这个问题的帖子,但都没能解决我的问题。我有一个扩展名为.c的文件,它可以在gcc上完美编译。我已经确保在项目属性中它被设置为编译为C代码。但是,当我尝试编译时,它失败了,因为它不允许我声明这样的数组: int scArray[N][v]; 这表明我试图把我的代码编译成C++(也许我在这方面错了)。 我能做些什么来解决这个问题?VS2013确实添加了相当数量的C99库支持,但据我所知,它不支持VLA。至少,我在微软的任何一篇文章中都没有提到它,而且代码也没有编译,所以。。。我想不会

我读过多篇关于这个问题的帖子,但都没能解决我的问题。我有一个扩展名为.c的文件,它可以在gcc上完美编译。我已经确保在项目属性中它被设置为编译为C代码。但是,当我尝试编译时,它失败了,因为它不允许我声明这样的数组:

int scArray[N][v];

这表明我试图把我的代码编译成C++(也许我在这方面错了)。


我能做些什么来解决这个问题?

VS2013确实添加了相当数量的C99库支持,但据我所知,它不支持VLA。至少,我在微软的任何一篇文章中都没有提到它,而且代码也没有编译,所以。。。我想不会的。有关库支持的信息,请参阅

编辑:根据您的评论,您必须动态分配内存

要分配指针,请执行以下操作:

int **p = malloc(N * sizeof *p); 
for(int i = 0; i < N; ++i) 
    p[i] = malloc(v * sizeof(int));
当然,您也可以只分配一大块,然后自己进行计算,但会丢失
p[x][y]
语法:

int *p = malloc(N * v * sizeof(int));
// fill with data
int elem = p[row * width + col];

有关Visual Studio“14”的C99的哪些部分正在进行中,请参见和。从历史上看,支持从来都不是Visual C++团队的一个高优先级,但是因为C++ 11包含了C99作为标准的一部分,所以它得到了更多的支持。@ ChuckWalbourn:是的,我找到了这些。没有提到VLA,所以我认为假设它不在工作中是安全的。那么,如果我需要声明一个由用户输入决定大小的数组,有什么替代方法呢?我是C和Visual Studio的新手,所以我不太确定如何实现这一点。使用
malloc
在堆上分配它,而不尝试在堆栈上分配它,这是使用C89时的方式。那就是或者只使用C++和。它是C++编译器,所以不足为奇。Visual Studio在编译C时完全是垃圾。请改用C编译器。@Lundin:使用哪种编译器并不总是他们的选择。我大体上同意;如果你有选择的话,选择一个关心支持C的C编译器。你知道,当他们回答你的问题时,通常会选择一个被接受的答案。你从来没有在这里选择过答案。考虑一下。我想知道为什么他们从UI中去掉了这个百分比。
int *p = malloc(N * v * sizeof(int));
// fill with data
int elem = p[row * width + col];