Visual Studio 2013不会编译C数组声明

时间:2014-09-30 05:39:38

标签: c arrays visual-studio visual-studio-2013 variable-length-array

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

int scArray[N][v];

这告诉我它正在尝试将我的代码编译为C ++(虽然我可能错了)。

我该怎么做才能解决这个问题?

1 个答案:

答案 0 :(得分:3)

VS2013确实增加了相当数量的C99库支持,但据我所知,它不支持VLA。至少,我在任何MS文章中都找不到它,代码也没有编译,所以......我假设它没有。有关库支持,请参阅this article

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

分配指针:

int **p = malloc(N * sizeof *p); 
for(int i = 0; i < N; ++i) 
    p[i] = malloc(v * sizeof(int));

如果您的数组维度在编译时已知,则会分配一个大块而不是执行N + 1分配:

int (*p)[COLS] = malloc(sizeof *arr * ROWS);

当然,你也可以自己分配一个大块并自己做数学,但是你失去了p[x][y]语法:

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