我已阅读有关此问题的多篇文章,但无法解决我的问题。我有一个扩展名为 .c 的文件,可以在 gcc 上完美编译。我已确保在项目属性中将其设置为编译为 C 代码。尽管如此,当我尝试编译时,它还是失败了,因为它不允许我这样声明一个数组:
int scArray[N][v];
这向我表明它正在尝试将我的代码编译为 C++(尽管我可能错了)。
我能做些什么来解决这个问题?
我已阅读有关此问题的多篇文章,但无法解决我的问题。我有一个扩展名为 .c 的文件,可以在 gcc 上完美编译。我已确保在项目属性中将其设置为编译为 C 代码。尽管如此,当我尝试编译时,它还是失败了,因为它不允许我这样声明一个数组:
int scArray[N][v];
这向我表明它正在尝试将我的代码编译为 C++(尽管我可能错了)。
我能做些什么来解决这个问题?
VS2013 确实添加了相当多的 C99 库支持,但据我所知,它不支持 VLA。至少,我在任何 MS 文章中都找不到提及它,并且代码无法编译,所以......我假设它没有。有关库支持,请参阅本文。
编辑:根据您的评论,您必须动态分配内存。
要分配您的指针:
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];