如何在vscode中禁用误报错误? [英] How to disable a false positive error in vscode?

查看:20
本文介绍了如何在vscode中禁用误报错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

它在GCC中编译得很好。但MS C/C++IntelliSense在显示错误时会出现曲折的状态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++扩展包v1.1.10扩展
  • MinGW-W64 GCC v8.1.0编译器

GCC未设置编译标志。

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

  • 编译器路径:C:Program Filesmingw-w64mingw64ingcc.exe
  • cppStandard:GNU++20
  • c标准:gnu17
  • intelliSenseMode:windows-gcc-x64

推荐答案

这显示为错误,因为它确实是一个错误。当您使用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:MinGWing++.exe

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

您可以通过转到VS代码首选项,在搜索栏中搜索C_Cpp.default.compilerPath来实现这一点,这将把您带到所需的输入框。输入C:mingw64ingcc.exe,编译将MSVC替换为gcc/g++

最后,尽量避免VLA,使用动态分配,因为这是一种更安全、更受支持的做法。

这篇关于如何在vscode中禁用误报错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆