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

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

我已经阅读了多篇有关此问题的帖子,但未能解决我的问题。我有一个扩展名为 .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/

相关文章:

c - 解释程序的输出

c++ - 大小由模板参数定义的成员数组,但为什么没有对零大小数组发出警告?

python 循环比 numpy 数组操作更快

.net - 在 Visual Studio 2010 中使用 .Net 2.0 Web 引用

GIT repo 错误 : Failed to push to the remote repository

c - 指向结构的指针。读取成员值的段错误

C 函数不起作用

java - 如何向文件中写入不是 8 倍数的位数

c++ - 错误:C2039: 'iswspace':不是 'std' 的成员,但 std::isspace() 编译正常

c - 释放C中的三重指针