【问题标题】:How to disable a false positive error in vscode?如何禁用 vscode 中的误报错误?
【发布时间】:2021-12-28 14:13:13
【问题描述】:

我已经编写了这个基本的 C 程序:

int main(int argc, char const *argv[])
{
    int n = rand();
    int a[n];
    return a[0];
}

在 gcc 中正确编译的内容。但是 MS C/C++ 智能感知在显示错误曲线时显示 expression must have a constant value C/C++(28) [4, 8]。经过一番谷歌搜索后,我发现 MSVC 还没有实现 VLA。但我无法找到抑制此错误的方法。有人请帮帮我!

编辑:此外,令人惊讶的是,第 3 行中隐式声明 rand 并没有警告!!!

编辑:如果可能的话,是否有人还可以提及 C/C++ 的替代扩展。

编辑:我正在使用:

  • Microsoft VSCode v1.63.2 代码编辑器
  • Microsoft C/C++ Extension Pack v1.1.10 扩展
  • MinGW-W64 gcc v8.1.0 编译器

GCC 没有设置编译标志。

C/C++ 扩展配置如下:

  • 编译器路径:C:\Program Files\mingw-w64\mingw64\bin\gcc.exe
  • cpp标准:gnu++20
  • c标准:gnu17
  • 智能感知模式:windows-gcc-x64

【问题讨论】:

  • 有人吗?请....!我拼命地试图从 4 小时内找到它。 :|
  • 这能回答你的问题吗? c++ array - expression must have a constant value
  • @Kamiccolo Nope.. 我正在使用 C,在 C 中,标准允许 VLA 和 gcc 实现它。这个问题是关于 C++ 的。
  • 您几乎没有提供有关您的开发环境的任何信息。建旗?带有版本等的完整工具链?根据这个,MVSC 不支持它:stackoverflow.com/a/5246961/1150918 godbolt 也失败了。
  • @Kamiccolo 编辑了问题。

标签: visual-studio-code intellisense


【解决方案1】:

这显示为错误,因为它确实是错误。当您使用MSVC 编译器时,它只会为您提供MSVC 编译的结果。

现在,这实际上是因为您做错了事。您似乎想初始化一个大小为n 的数组,该数组是从随机值中获得的。换句话说,你应该执行dynamic allocation,即在运行时分配内存。由于您使用的是 C,因此您必须为此使用 malloc 函数,如下所示:

#include <stdlib.h>
int main(int argc, char const *argv[])
{
    int n = rand();
    int *a = malloc(n * sizeof(int));//Dynamic allocation of an array
    int val = a[0];//Garbage value
    free(a);//Deallocation / Free the memory taken by array 
    return val;
}

如果要将MSVC替换为gcc,可以通过更改设置来更改VS代码中C/C++的默认编译器:

更改您的设置

C_Cpp.default.compilerPath` : C:\MinGW\bin\g++.exe

编辑:我错误地提到路径应该是 bin 文件夹。相反,它应该是g++.exe 本身。我下载了最新的二进制文件并为您确认。

您可以通过转到 VS 代码首选项来执行此操作,在搜索栏中搜索 C_Cpp.default.compilerPath,这将引导您进入所需的输入框。输入C:\mingw64\bin\gcc.exe,编译会将MSVC替换为gcc/g++

最后,尽量避免使用 VLA 并使用动态分配,因为它是一种更安全且受到广泛支持的做法。

【讨论】:

  • This shows as an error because it indeed is an error. 是的,我知道这确实是一个错误,但我想知道如何在智能感知中抑制它。
  • 另外,问题中显示的代码 sn-p 只是我的案例的最小可重现示例。我在另一个个人项目中使用 VLA。
  • 我已更改设置以添加compilerPath。但它显示了这一点:[29/12/2021, 12:12:23 pm] Unable to resolve configuration with compilerPath "C:\MinGW\bin". Using "C:\MinGW\bin\gcc.exe" instead. 并且错误仍然存​​在。
  • @SouravKannanthaB 你不能抑制错误,你只能抑制警告
  • @SouravKannanthaB 你能告诉我你输入的确切路径吗?
猜你喜欢
  • 2014-01-13
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
  • 2020-10-14
  • 2016-08-11
  • 2012-11-07
  • 2018-12-08
  • 2021-03-08
相关资源
最近更新 更多