VScode C++头文件问题的终极解决办法

2023-10-27

VScode C++头文件问题的终极解决办法

之前在配置VScode环境的时候,按照网上的文章配置,总是找不到头文件,搜索解决方案,都是千篇一律,没有说到重点。在此详细解释一下。

局部配置全局配置傻傻分不清楚

网上很多文章都在讲一个配置文件c_cpp_properties.json,但是有些人不知道什么原因是找不到这个配置文件的。在扩展面板中,点击C++的设置进入的页面其实是通用设置页面,大概长这样:
在这里插入图片描述
这里只能看到"在settings.json中编辑"的选项,无论怎么写,都不可能生效,因为真正的配置文件在c_cpp_properties.json中。settings.json文件中的都是全局的一些默认配置。比如说,我配置完之后是这样的:

//全局的settings.json
{
"C_Cpp.default.compilerPath": "C:/MinGW/bin/g++.exe",
    "C_Cpp.default.includePath": [
        "${workspaceFolder}/**",
        "C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++",
        "C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/x86_64-w64-mingw32",
        "C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward",
        "C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include",
        "C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/include-fixed",
        "C:/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/8.1.0/../../../../x86_64-w64-mingw32/include"
    ],
    "C_Cpp.default.intelliSenseMode": "linux-gcc-x64",
}

这样的配置本身没有错,但是最关键的问题在于,如果之前已经用vscode打开过文件夹,并且在文件夹中自动生成了.vscode配置文件夹,那么大概率会自动生产一个c_cpp_properties.json配置文件,并且是不带默认配置的,大概是这样:

//.vscode文件夹局部的配置c_cpp_properties.json
{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**" //问题就出在这一行
            ],
            "defines": [],
            "compilerPath": "C:/MinGW/bin/g++.exe", 
            "cStandard": "c11",
            "cppStandard": "c++11",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

如果.vscode局部的配置文件没有显示的声明c_cpp插件的includePath那么相当于只有这一行"${workspaceFolder}"的配置生效,也就是只在当前工作目录下查找头文件,那能找到才怪咧。
因此,要特别注意,如果发现include头文件出现问题,首先看一下.vscode目录下的配置是否正确,然后再去看全局的配置。
这种情况的解决方案很简单,因为全局的default配置已经写好了include的路径,只需要在局部的配置这儿增加一行"${default}"即可:

//.vscode文件夹局部的配置c_cpp_properties.json
{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "${default}" //只需要加这一行,就是这么简单
            ],
            "defines": [],
            "compilerPath": "C:/MinGW/bin/g++.exe", 
            "cStandard": "c11",
            "cppStandard": "c++11",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

"${default}"的效果,就是让局部配置去调用全局配置中的默认选项,也就是全局settings.json中的那些配置。

一些有帮助的信息

  1. 不要直接在sourceforge下载mingw64,很大概率你下载到的是源码包,需要在特定环境下之后才能用,在源码包里是找不到g++.exe之类的东西的,不要浪费时间直接去找网盘下编译好的build。
  2. 解压build之后,通常放在C盘根目录下,然后找到系统高级设置,配置环境变量。要注意,如果配置的是系统环境变量而非用户环境变量时,需要注销后生效,不需要重启电脑。
  3. 具体includePath是什么,在配置好环境变量之后,也就是CMD中输入gcc -v可以看到正常输出之后,在CMD中输入gcc -v -E -x c++ -命令,就可以列出所有的include路径,加上双引号之后就可以copy到对应的json配置中了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VScode C++头文件问题的终极解决办法 的相关文章

随机推荐

  • 第七站:吃透JavaScript中的函数

    欢迎来到 JavaWeb的奇妙冒险 教学系列 在这里 我们将继续探索Web开发的精彩世界 本站将为你揭开JavaScript中变量的神秘面纱 让我们在学习的过程中既轻松愉快 又能掌握高质量的知识 准备好进入第七站的学习之旅了吗 让我们开始吧
  • 【C++11】右值引用和移动语义 万能引用和完美转发

    文章目录 1 右值引用和移动语义 1 1 左值引用和右值引用 1 2 右值引用的使用场景 1 3 新的类功能 2 万能引用与完美转发 2 1 万能引用的基本介绍和使用 2 2 完美转发 2 3 完美转发的实际应用场景 3 可变参数模板 3
  • C++继承(一)

    目录 继承方式 继承同名成员处理方式 父类与子类中都有相同的成员 继承同名静态成员处理方式 继承中的对象模型 继承中构造和析构函数 菱形继承 多继承语法 在多种接口需要相同输出时 C 的继承相对于传统方式更有利也更方便维护 C 继承语法 c
  • React + css3 实现circle圆环进度条加载

    需求效果图 如上图所示 需求 动态获取不同的分数 圆环展示对应的百分比分数值 正确率 70 以下提示文案 还需要继续加油哦 正确率 70 90 以下提示文案 不错 再加把劲 正确率 90 及以上提示文案 真棒 数据描述 不同的测试分数显示不
  • 如何用Git LFS管理超过50MB的文件

    首先说明 Github对文件上传尺寸有50MB的限制 如果想要上传大于50MB的文件 必须用Git Large File System进行管理 一般情况下 超额的这部分大型文件是各种包啊什么的 比如Unity项目内的一些package 本身
  • Spring IOC的实现机制

    1 什么是Spring IOC Spring IOC Inversion of Control 控制反转 是Spring框架的核心特性之一 它是一种设计模式 通过该模式 对象的创建 依赖注入和生命周期管理等操作由容器负责 而不是由程序员手动
  • Spring-cloud 导致应用收到多次ApplicationPreparedEvent

    最近排查发现DubboComponent被重复注册 怀疑ApplicationPreparedEvent收到了多次 public final class DubboConfigApplicationListener implements A
  • 华为OD机试 -配置文件恢复(C++ & Java & JS & Python)

    描述 有6条配置命令 它们执行的结果分别是 命 令 执 行 reset reset what reset board board fault board add where to add board delete no board at a
  • SPI 及 NOR Flash 介绍

    一 SPI 1 SPI的含义 SPI 串行外设设备接口 Serial Peripheral Interface 是一种高速的 全双工 同步的通信总线 SPI接口主要应用在存储芯片 AD转换器以及LCD中 SPI接口主要应用在存储芯片 AD转
  • Springboot 配置文件中用户名密码加密

    原配置文件内容 详细操作步骤 1 在pom xml文件中加依赖
  • 探究vite——新一代前端开发与构建工具(一)

    Vite 法语意为 快速的 发音 vit 是一种新型前端构建工具 能够显著提升前端开发体验 它主要由两部分组成 一个开发服务器 它基于 原生 ES 模块 提供了 丰富的内建功能 如速度快到惊人的 模块热更新 HMR 一套构建指令 它使用 R
  • 设计模式,命令模式,c++实现,提升内聚性,消除功能类与高层的耦合

    命令模式 给功能类集设置一个接口人 执行者 执行所有需求命令 避免外部 调用者 直接调用某个功能类的内部函数产生大量耦合 用于类间解耦 命令模式是一个高内聚的模式 将一个请求封装为一个对象 使用不同的请求把客户端参数化 对请求排队或者记录请
  • 深度学习中的不确定性:What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision

    转载 https zhuanlan zhihu com p 98756147 原文 What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision NI
  • VUE项目中使用this.$forceUpdate();解决页面v-for中修改item属性值后页面v-if不改变的问题

    页面展示 实现效果 点击实现列表内容的展开 折叠 代码 div class invoice list div class images img src static images invoice pu png img src static
  • SD卡通信接口 SD协议 SPI协议

    SD协议与SPI协议 SD卡虽然只有一种物理接口 但是却支持两种读写协议 SD协议和SPI协议 SPI协议特点 1 SPI协议是单片机中广泛使用的一种通信协议 并不是为SD卡专门发明的 2 SPI协议相对SD协议来说速度比较低 3 SD卡支
  • XGBoost学习(二):介绍及安装

    XGBoost学习 一 原理 XGBoost学习 二 安装及介绍 XGBoost学习 三 模型详解 XGBoost学习 四 实战 XGBoost学习 五 参数调优 XGBoost学习 六 输出特征重要性以及筛选特征 完整代码及其数据 前言
  • 如何使用ssh来连接windows

    什么是SSH协议 在计算机领域中 SSH文本传输协议 安全文件传送协议 是一种数据流连接 提供文件访问 传输和管理功能的网络传输协议 在windows上使用ssh协议因为该协议通过tcp22端口 路由器 服务器 交换机 沙sftp等不安全程
  • Qml中调用C++

    Qml中调用C 方法一 1 写一个C 类 2 在需要使用的地方注册该类 3 qml 中调用 在qml中调用C 类步骤如下 方法一 1 写一个C 类 写一个类 继承自QObject 将类中需要qml调用的方法 用前置的Q INVOKABLE声
  • List集合的定义和原理

    目录 一 List集合的特点介绍 二 List集合的子类 1 ArrayList 2 LinkedList 一 List集合的特点介绍 java util List接口继承于Collection接口 1 List集合是有序的 2 List集
  • VScode C++头文件问题的终极解决办法

    VScode C 头文件问题的终极解决办法 之前在配置VScode环境的时候 按照网上的文章配置 总是找不到头文件 搜索解决方案 都是千篇一律 没有说到重点 在此详细解释一下 局部配置全局配置傻傻分不清楚 网上很多文章都在讲一个配置文件c