vscode 工程中 c_cpp_properties.json文件作用

在 Visual Studio Code(VSCode)开发C或C++项目时,c_cpp_properties.json 文件是一个非常重要的配置文件,主要由微软提供的 C/C++ 扩展(C/C++ extension from Microsoft)使用。它主要用于配置 IntelliSense(代码自动补全)、代码分析、调试等功能。以下是该文件的作用及其各部分的详细说明。

1. 文件位置

通常,c_cpp_properties.json 文件位于 .vscode 目录中,即:

.vscode/
├── c_cpp_properties.json
└── ...

2. 主要作用

  • 配置 IntelliSense:设置编译器路径、头文件搜索路径等信息,使得 VSCode 能够提供高效的代码补全、代码跳转等功能。
  • 配置编译器:指定编译器类型和版本,确保代码分析和调试信息与实际编译器一致。
  • 配置调试和运行环境:为不同的操作系统和环境(如 Windows、Linux、macOS)定制不同的编译和运行配置。

3. 配置文件结构

c_cpp_properties.json 文件结构通常如下:

{"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/**"],"defines": ["_DEBUG","UNICODE"],"compilerPath": "C:/path/to/gcc.exe","cStandard": "c11","cppStandard": "c++17","intelliSenseMode": "gcc-x64"}],"version": 4
}

接下来是对每个配置项的详细说明:

4. 配置项说明

  • configurations:这是一个配置数组,你可以为不同的平台和环境定义多个配置。
    • name:配置的名称,例如 Win32LinuxMacCustom 等,方便区分和选择。
    • includePath:头文件搜索路径。在解析代码时,VSCode 会在这些路径中搜索头文件。支持使用占位符和环境变量,如 ${workspaceFolder} 表示当前工作区的根目录,或 ${workspaceFolder}/** 表示递归包含所有子目录。
    • defines:定义预处理器宏。例如 _DEBUGUNICODEMY_DEFINE=1 等,模拟编译器预定义宏。
    • compilerPath:指定C/C++编译器的路径,VSCode将使用它来获取编译器相关信息。例如,C:/MinGW/bin/gcc.exe 或 /usr/bin/gcc
    • cStandard:设置C标准,支持的值有 c89c99c11gnu11 等。
    • cppStandard:设置C++标准,支持的值有 c++98c++11c++14c++17c++20gnu++11gnu++17 等。
    • intelliSenseMode:设置 IntelliSense 模式,通常根据编译器和架构选择,常见值包括 gcc-x64gcc-arm64msvc-x64clang-x64clang-arm64

5. 示例配置

示例 1:Windows 环境的配置
{"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/include","C:/path/to/external/libs/include"],"defines": ["_DEBUG","UNICODE","_UNICODE"],"compilerPath": "C:/MinGW/bin/gcc.exe","cStandard": "c11","cppStandard": "c++17","intelliSenseMode": "gcc-x64","browse": {"path": ["${workspaceFolder}/src","${workspaceFolder}/include","C:/path/to/external/libs/src"],"limitSymbolsToIncludedHeaders": true,"databaseFilename": ""}}],"version": 4
}
示例 2:Linux 环境的配置
{"configurations": [{"name": "Linux","includePath": ["${workspaceFolder}/include","/usr/include","/usr/local/include"],"defines": [],"compilerPath": "/usr/bin/gcc","cStandard": "gnu11","cppStandard": "gnu++17","intelliSenseMode": "gcc-x64","browse": {"path": ["${workspaceFolder}/src","${workspaceFolder}/include","/usr/include","/usr/local/include"],"limitSymbolsToIncludedHeaders": true,"databaseFilename": ""}}],"version": 4
}

6. 配置多个环境

你还可以为多个环境设置不同的配置,并在 VSCode 中自由切换。例如:

{"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/**"],"defines": ["_DEBUG", "UNICODE"],"compilerPath": "C:/MinGW/bin/gcc.exe","cStandard": "c11","cppStandard": "c++17","intelliSenseMode": "gcc-x64"},{"name": "Linux","includePath": ["${workspaceFolder}/**", "/usr/include"],"defines": [],"compilerPath": "/usr/bin/gcc","cStandard": "gnu11","cppStandard": "gnu++17","intelliSenseMode": "gcc-x64"}],"version": 4
}

7. 总结

c_cpp_properties.json 文件在 VSCode 中对 C/C++ 项目开发起着至关重要的作用,通过配置该文件,你可以:

  • 提供更好的代码补全和代码分析功能。
  • 指定使用的编译器及其版本。
  • 设置头文件搜索路径和预处理器宏定义。
  • 为不同的开发平台定制不同的配置。

合理配置 c_cpp_properties.json 文件,有助于提高开发效率和代码质量。希望以上说明对你理解和使用该文件有所帮助。

8. 关于IntelliSense 模式的使用说明

在 Visual Studio Code(VSCode)中,IntelliSense 是微软为开发者提供的一组丰富的代码辅助功能,包括代码自动补全、参数信息、快速信息和代码片段等。这些功能有助于提高开发效率,减少错误,并使代码更具可读性。

        8.1. IntelliSense 模式

c_cpp_properties.json 中,intelliSenseMode 属性用于指定 IntelliSense 的工作模式。这一属性告诉 VSCode 使用哪种编译器和架构来解析和理解代码,以提供更加准确的代码补全、错误报告及其他辅助功能。

        8.2. 支持的 IntelliSense 模式

IntelliSense 模式通常与编译器和目标体系结构相关联。以下是一些常见的 IntelliSense 模式及其含义:

  • msvc-x64:表示使用 Microsoft Visual C++ 编译器(MSVC)进行 64 位架构的解析。
  • msvc-x86:表示使用 MSVC 进行 32 位架构的解析。
  • gcc-x64:表示使用 GNU 编译器集合(GCC)进行 64 位架构的解析。
  • gcc-x86:表示使用 GCC 进行 32 位架构的解析。
  • clang-x64:表示使用 Clang 编译器进行 64 位架构的解析。
  • clang-x86:表示使用 Clang 进行 32 位架构的解析。
  • gcc-arm:表示使用 GCC 进行 ARM 架构的解析。
  • clang-arm:表示使用 Clang 进行 ARM 架构的解析。

        8.3. 如何选择 IntelliSense 模式

选择 IntelliSense 模式时,主要考虑以下几个因素:

  1. 编译器类型:你实际使用的编译器是哪个?MSVC、GCC 还是 Clang?
  2. 目标架构:你的目标操作系统和处理器架构是什么?x86、x64 还是 ARM?
  3. 兼容性:为了确保 IntelliSense 的解析方式与编译器的解析方式一致,选择与你的编译器和目标架构匹配的模式。

        8.4. 示例配置

示例 1:Windows 上使用 MSVC 编译器进行 64 位开发
{"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/**"],"defines": ["_DEBUG","UNICODE"],"compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.24.28314/bin/Hostx64/x64/cl.exe","cStandard": "c11","cppStandard": "c++17","intelliSenseMode": "msvc-x64"}],"version": 4
}
示例 2:Linux 上使用 GCC 编译器进行 64 位开发
{"configurations": [{"name": "Linux","includePath": ["${workspaceFolder}/include","/usr/include","/usr/local/include"],"defines": [],"compilerPath": "/usr/bin/gcc","cStandard": "gnu11","cppStandard": "gnu++17","intelliSenseMode": "gcc-x64"}],"version": 4
}

        8.5. 调整 IntelliSense 弹出提示

如果 IntelliSense 的提示信息与你预期不符,可以通过调整 c_cpp_properties.json 中的配置项来进行优化:

  • 确保 includePath 是正确的。
  • 确保 defines 中包含了所有必要的预处理宏。
  • 设置正确的 compilerPath
  • 选择正确的 intelliSenseMode

        总结

IntelliSense 模式 是 VSCode 中一个重要的配置项,它决定了代码补全、错误报告等辅助功能的工作方式。通过合理配置 IntelliSense 模式,你可以获得更精准的代码提示和错误检查,从而提升开发效率和代码质量。

        另外,如果还需要进一步的调校和优化 IntelliSense 功能,官方的 C/C++ 扩展文档 是一个很好的参考资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/866916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

postgrelDB的订阅的暂停 启用 强制同步 重新初始化订阅的介绍

在 PostgreSQL 中,如果你使用的是逻辑复制(Logical Replication)来实现数据库A的表1发布,数据库C订阅表1的场景,那么你可以通过以下步骤来强制同步数据库A的表1到数据库C的表1。 步骤 暂停订阅:首先暂停数据库C上的订阅,以确保在你手动修改数据时不会有新的数据同步过…

SpringBoot的在线教育平台-计算机毕业设计源码68562

摘要 在数字化时代,随着信息技术的飞速发展,在线教育已成为教育领域的重要趋势。为了满足广大学习者对于灵活、高效学习方式的需求,基于Spring Boot的在线教育平台应运而生。Spring Boot以其快速开发、简便部署以及良好的可扩展性&#xff0c…

LeetCode 算法:二叉树的最近公共祖先 III c++

原题链接🔗:二叉树的最近公共祖先 难度:中等⭐️⭐️ 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点…

扫地机器人如何利用图算法来进行避障策略和优化清扫路径的?

前言 扫地机器人是现代家庭中最常见的智能设备。其基本的核心组件由主控系统(大脑)、传感器等控制系统(感知系统)、动力供应系统(心脏)、清扫系统(四肢)组成。 扫地机器人的智能、高…

嵌入式UI开发-lvgl+wsl2+vscode系列:6、布局(Layouts)

一、前言 这节总结一下整体页面的布局方式,lvgl的布局方式比较少,目前只有flex和grid两大类布局,即弹性布局和网格布局,弹性布局一般就是指定相对位置,网格布局就是将整个页面划分为网格状,我们做其它的UI…

Typescript window.localStorage 存储 Obj Value区别

window.localStorage.setItem(UserC, JSON.stringify(userC)) const userC JSON.parse(window.localStorage.getItem(UserC) || {}) 不能获得UserC,所有保存的时候需要存储value,而不是对象。 {"__v_isShallow":false, "__v_isRef&quo…

2-3 图像分类数据集

MNIST数据集是图像分类任务中广泛使用的数据集之一,但作为基准数据集过于简单,我们将使用类似但更复杂的Fashion-MNIST数据集。 %matplotlib inline import torch import torchvision # pytorch模型关于计算机视觉模型实现的一个库 from torch.utils i…

面试题 4:阐述以下方法 @classmethod, @staticmethod, @property?

欢迎莅临我的博客 💝💝💝,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

绘唐科技聚星文社是同款一键生成工具

聚星文社是同款一键生成工具 工具下载 绘唐科技成立于2015年,是一家专注于虚拟现实(VR)技术和产品开发的高科技企业。绘唐科技的目标是利用虚拟现实技术为人们带来更加沉浸式的体验,推动虚拟现实在各个领域的应用和发展。 绘唐科…

LabVIEW环境下OCR文字识别的实现策略与挑战解析

引言 在自动化测试领域,OCR(Optical Character Recognition,光学字符识别)技术扮演着重要角色,它能够将图像中的文字转换成机器可编辑的格式。对于使用LabVIEW约5个月,主要进行仪器控制与数据采集的你而言…

探索Redis GEOMETRY数据结构:地理空间索引与查询(基于Redis GEO和Java实现附近商户查找功能)

摘要 Redis是一个高性能的键值存储系统,广泛应用于缓存、消息队列、排行榜等场景。本文将介绍Redis中一个假设的GEOMETRY数据结构,用于高效地存储和查询地理空间数据。 1. Redis地理空间数据结构概述 地理空间数据结构允许用户存储地理位置信息&#…

谈大语言模型动态思维流程编排

尽管大语言模型已经呈现出了强大的威力,但是如何让它完美地完成一个大的问题,仍然是一个巨大的挑战。 需要精心地给予大模型许多的提示(Prompt)。对于一个复杂的应用场景,编写一套完整的,准确无误的提示&am…

jmeter-beanshell学习1-vars使用获取变量和设置变量

最近又开始了用jmeter做自动化,不管怎么实现,都逃离不了用beanshell,最后把所有校验都放在了beanshell判断,效果还不错。 首先jmeter有很多beanshell相关的元件,取样器、前置处理器、后置处理器、断言,暂时…

Linux 软件管理

Linux 软件管理 在 Linux 系统中,RPM(Red Hat Package Manager)和 YUM(Yellowdog Updater, Modified)是用于软件包管理的重要工具。 RPM RPM 是由 Red Hat 公司开发的软件包管理系统。 RPM 软件包通常具有 .rpm 扩…

南方航空阿里v2滑块验证码逆向分析思路学习

目录 一、声明! 二、介绍 三、请求流程分析: 1.拿验证码 2.提交第一次设备信息 3.提交第二次设备信息 4.提交验证 ​编辑 四、接口响应数据分析: 1.拿验证码 2.提交第一次设备信息 3.提交第二次设备信息 4.提…

代码随想录第43天|动态规划

121. 买卖股票的最佳时机 股票只能被买卖一次 dp[i][0] 持有股票所得到的最大现金, dp[i][1] 不持有股票所得的最大现金, 避免定义多个变量递推公式: dp[i][0] 可能是在之前买入, 也可能是在这次被买入 max(dp[i - 1][0],-prices[i])dp[i][1] 可能是在本次抛售, 也可能在之…

误删分区后的数据拯救:双管齐下恢复策略

在数字化时代,数据的价值日益凸显,而误删分区作为常见的数据安全威胁之一,常常让用户措手不及。本文将深入探讨误删分区的现象,并为您揭示两种高效的数据恢复方案,旨在帮助您在最短时间内找回失去的数据,同…

RH850系列芯片深度剖析 1.8-内存管理之MPU

RH850系列芯片深度剖析 1.8-内存管理之MPU 文章目录 RH850系列芯片深度剖析 1.8-内存管理之MPU一、MPU简介1.1 功能特性1.2 系统保护标识符(SPID)二、保护区域设置2.1 保护区域属性设置2.2 保护区域设置注意事项2.2.1 跨越保护区域边界2.2.2 无效的保护区域设置2.2.3 保护违规…

当火热的Mamba遇到火热的YOLO,会发生怎么样的反应吗?

作者:浙江师范大学 论文地址:https://arxiv.org/pdf/2406.05835 代码地址:https://github.com/HZAI-ZJNU/Mamba-YOLO 目录 前言一、摘要二、介绍二、相关工作2.1 实时目标检测器2.2 端到端的目标检测器2.3 视觉状态空间模型 三 方法3.1 基础知…

Amesim应用篇-信号传递

前言 在Amesim中常见的信号传递是通过信号线连接,针对简单的模型通过信号线连接还可以是信号线清晰规整,方便查看。如果模型较复杂,传递信号的元件较多时,此时再继续使用信号线进行信号传递,可能会使草图界面看起来杂…