arrays - 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);
}
解决方案
该代码需要 C99 功能的可变长度数组,因为即使const
在const int N
意味着常量中,它实际上并不被视为 C 中的编译时常量。
不幸的是,即使是最近,MSVC 编译器也只实现了 30 年前的(!!)ISO C90 标准修订版,其中包含一些扩展,但没有实现可变长度数组。
const int N
您可以通过将 更改为预处理器宏来将此程序修复为 C89 :
#define N 5
VS2019 将支持 C11,C17 对您没有一点帮助,因为由于 Microsoft 拒绝从 C99 实现可变长度数组,VLA 在 C11、C17 中已成为可选,并且据说 MSVC 不会实现他们。
推荐阅读
- python - 熊猫 | 根据条件复制数据框值
- python - 元类不会被继承
- python-3.x - 为什么我的 pong 代码有 ParseError,我该如何解决?
- python - 根据每个列表的索引列表从列表列表中提取元素
- python - 我可以使用 Google API (Python) 获取给定 url 的反向链接吗
- amazon-web-services - Terraform - 不能在字符串模板中包含给定值:需要字符串
- animation - SVG 动画贝塞尔曲线以跟随箭头增长
- java - 如何跟踪在 java 中相互引用的对象列表?
- python-3.x - 将文件的行转换为python 3中的列表元组
- azure - 在 Azure 管道中运行简单测试时,模拟挂起且 isDone() 为 false