我已经阅读了多篇有关此问题的帖子,但未能解决我的问题。我有一个扩展名为 .c 的文件,可以在 gcc 上完美编译。我已确保在项目属性中将其设置为“编译为 C 代码”。尽管如此,当我尝试编译时,它还是失败了,因为它不允许我声明这样的数组:
int scArray[N][v];
这向我表明它正在尝试将我的代码编译为 C++(不过也许我错了)。
我可以做什么来解决这个问题?
最佳答案
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];
关于c - Visual Studio 2013 不会编译 C 数组声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26113503/