【问题标题】:"expression must have a constant value" error in VS code for CC的VS代码中的“表达式必须具有常量值”错误
【发布时间】:2021-08-05 09:32:29
【问题描述】:

我写了一个简单的原型代码来说明问题:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>


int main(int argc, char const *argv[])
{
    int rows, columns;
    int arr[rows][columns];

    printf("%i", arr[0][0]);
}

编译此代码我没有收到错误/警告,但在我的 IDE(Visual Studio 代码)中,变量 rowscolumns 带有红色下划线,当将鼠标悬停在它们上方时,我收到错误/消息说 @987654324 @。

这是代码中的问题还是只是 IDE 的问题?代码编译和运行没有任何问题,并且完全按照我的需要运行。知道这是为什么吗?

非常感谢。

【问题讨论】:

  • 最生动的问题是你的变量行和列未初始化。它们没有价值。错误文本似乎还表明它们不仅需要具有值,而且这些值必须是常量值。在 C++ 中就是这种情况。我有点惊讶,因为我的印象是 C 支持可变长度数组
  • @ArmenTsirunyan 即使为它们分配了值,也会显示相同的错误。根据我所做的研究,C 确实支持可变长度数组,这就是您初始化它们的方式(授予int rows, columns; 应该为它们分配值,例如int rows = 1, columns = 2;。似乎是 IDE 的问题,但我只是想确认一下。
  • 我相信您的 IDE 设置为 C++ 模式,不支持 VLA。如果您可以将其设置为识别 C99 语法,它应该可以工作。
  • @abelenky 我在 VS 代码中使用 c/c++ 扩展。据我了解,我认为不能只使用扩展的 C 部分。但是,根据您的建议,我尝试使用不同的 IDE 并没有遇到任何问题。所以看起来你是对的。谢谢。
  • @Slash MSVC 不支持 C99。

标签: arrays c


【解决方案1】:

C 自 C99 起支持可变长度数组,因此您的数组声明是有效的。 您的 IDE 可能设置为 C++ 模式或 C99 之前的 C 标准,因此会引发该警告。

附带说明,您没有初始化 rowscolumns 变量或数组内容,这意味着它们的值未定义。

【讨论】:

  • MSVC doesn't support C99。嘿,这才22年。给微软的人一些时间。当本世纪只有五分之一的时候,你不能指望他们支持上世纪的 C 标准......
  • 呵呵,不知道。但是话又说回来,我一直在使用 clang 工具链和 clangd 从现在开始......
  • 是的,类似于“什么?!?!MSVC 不完全支持 C 99?!?!”是平常的。 Their low standards for supporting C are fully evident here:“我们的团队很高兴地宣布,从 Visual Studio 2019 版本 16.8 Preview 3 开始,C11 和 C17 将成为 MSVC 编译器工具集中受支持的语言版本!”哎哟。我不确定我会吹嘘自己迟到了。特别是考虑到他们跳过了 C99。它们甚至不受支持。他们得到支持
猜你喜欢
  • 2020-03-07
  • 2012-07-27
  • 1970-01-01
  • 2014-10-21
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 2011-11-21
相关资源
最近更新 更多