我已阅读有关此问题的多篇帖子,但未能解决我的问题。我有一个扩展名为.c的文件,可以在gcc上完美编译。我确保在项目属性中将其设置为Compile to C code。但是,当我尝试编译时,它失败了,因为它不允许我声明这样的数组:
int scArray[N][v];
这告诉我它正在尝试将我的代码编译为C ++(虽然我可能错了)。
我该怎么做才能解决这个问题?
答案 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];