首页 > 解决方案 > C 中全局整数声明的数组问题

问题描述

完全是编程新手,目前正在关注 Youtube 上的 CS50 课程,所以我无法访问他们的 CS50 沙箱。我目前在讲关于数组的第 2 课。根据教授的说法,以下代码应该可以正常编译和运行,但是在我的 PC 上的 Visual Studio 2019 社区版上,我遇到了错误 C2057,预期为常量表达式;和错误 c2466,编译时无法分配常量大小为 0 的数组。

请帮助解释为什么在 CS50 在线沙箱中,这些代码很好,而在 VS 2019 中却不行?是我的代码写得不对,还是 VS2019 的工作方式与 CS50 沙盒不一样?我在某处读到 VS2019 与 C99 或类似的东西不兼容,这与手头的问题有关吗?

PS:今天还看到VS2019将支持C11和C17,这个新的更新会有帮助吗?

非常感谢!

这些是我的代码:

#include <stdio.h>

const int N = 5;

int main(void)
{
    double scores[N] = { 59, 60, 90, 85, 87 };
    double total_score = 0;
    for (int i = 0; i < N; i++)
    {
        
        total_score += scores[i];
    }
    double average = total_score / N;
    printf("Average score is : %.1f,", average);
}

标签: arrayscglobal-variablescs50

解决方案


该代码需要 C99 功能的可变长度数组,因为即使constconst int N意味着常量中,它实际上并不被视为 C 中的编译时常量。

不幸的是,即使是最近,MSVC 编译器也只实现了 30 年前的(!!)ISO C90 标准修订版,其中包含一些扩展,但没有实现可变长度数组。

const int N您可以通过将 更改为预处理器宏来将此程序修复为 C89 :

#define N 5

VS2019 将支持 C11,C17 对您没有一点帮助,因为由于 Microsoft 拒绝从 C99 实现可变长度数组,VLA 在 C11、C17 中已成为可选,并且据说 MSVC 不会实现他们。


推荐阅读