【发布时间】:2020-09-29 19:21:30
【问题描述】:
所以我正在学习 C 的课程。其中一项作业是查看并理解对 5 个等级(数字)进行排序的代码。我将教授的代码复制到 MVS,但出现了错误。正如代码中的 cmets 所见,我解决的问题之一。但我不明白教授是如何编译的。
所以我的问题是:如何解决第二个错误?
int w[how_many];//error: expression must have a constant value.
有人愿意帮忙吗?
我正在使用 Visual Studio。尝试“禁用语言扩展”,将源文件从 .cpp 重命名为 .c 并更改为“编译为 C 代码 (/TC)”
#include <stdio.h>
#define SIZE 5
void print_array(int how_many, int data[], const char* str)
{
int i;
printf("%s", str);
for (i = 0; i < how_many; i++)
printf("%d\t", data[i]);
}
void merge(int a[], int b[], int c[], int how_many)
{
int i = 0, j = 0, k = 0;
while (i < how_many && j < how_many)
if (a[i] < b[j])
c[k++] = a[i++];
else
c[k++] = b[j++];
while (i < how_many)
c[k++] = a[i++];
while (j < how_many)
c[k++] = b[j++];
}
void mergesort(int key[], int how_many)
{
int j, k;
int w[how_many];//error: expression must have a constant value
for (k = 1; k < how_many; k *= 2)
{
for (j = 0; j < how_many - k; j += 2 * k)
merge(key + j, key + j + k, w + j, k);
for (j = 0; j < how_many; j++)
key[j] = w[j];
}
}
int main(void)
{
//const int SIZE = 5; // removed because of error and added #define SIZE 5
int a[SIZE] = { 67, 82, 83, 88, 99 };// error: needs constant value, solved by adding #define SIZE 5
print_array(SIZE, a, "My grades\n");
printf("\n\n");
mergesort(a, SIZE);
print_array(SIZE, a, "Sorted grades\n");
printf("\n\n");
return 0;
}
【问题讨论】:
-
Visual Studio 仅对 C(准确地说是 C89)提供有限的支持。可变长度数组是 C99 功能,Visual Studio 编译器不支持该功能
-
@UnholySheep VLA 无法初始化。
-
@AnttiHaapala 行 OP 指出给出错误不会尝试初始化数组,所以我不确定你指的是什么
-
@OP 你是说你在搬到视觉工作室之前就可以编译这个了吗?还是教授说他能编译?在我看来,他似乎故意在作业中添加错误让您解决。
-
@Spectrem - 教授能够编译。我认为他是在他的 Mac 上使用 GCC/GNU 完成的。但我不认为他故意在这个作业上犯错误。这是你看到的初学者课程。
标签: c visual-studio