C++学习之路:从头搞懂配置VScode开发环境的逻辑与步骤
目录
- 编辑器与IDE
- 基于vscode的C++开发环境配置
- 1. 下载vscode、浅尝编译。
- 番外篇
- 2. 安装插件,赋能编程。
- 3. 各种json文件的作用。
- c_cpp_properties.json
- task.json
- launch.json
- 总结&&彩蛋
编辑器与IDE
上一篇博客已经介绍过了C++程序的一个编译流程,从这篇文章开始进行编程的实验。
正所谓“工欲善其事,必先利其器”,有很多小白入门时大把的时间都被浪费在配置和安装开发环境上,因此这篇博客将从易于理解的角度来讲讲怎么样配好一个C++的开发环境,目标是一次学习永远记忆。
其实写一个能运行的程序是一个很简单的事情,如果你用的是windows系统可以直接创建一个扩展名为.cpp的文件,然后用自带的文本编辑器进行编辑,然后在终端使用g++编译器对其进行编译就能得到一个能运行的.exe文件了,因此C++开发环境只需要文本编辑器+编译器即可完成搭建。
但事实上,为了更舒服与高效地写程序,我们还需要许多额外的功能,例如自动补全、语法纠错、程序调试 等。单个文本编辑器(例如vscode)不具备这样的功能,因此还需要安装额外的一些插件来配合使用,这就是这章主要讲的内容如何在vscode上安装与配置好C++开发需要的插件。
但对于IDE(集成开发环境)来说,这些插件功能与文本编辑器本身已经融为一体,不需要额外的安装配置,使用起来比vscode轻松简单很多,常见的IDE有,DevC++、VS、CLion,Eclipse等。但为什么还需要劳心费力地教大家学习使用vscode呢?
- 首先,vscode全开源,市面上大部分的IDE都需要收费与许可证。
- 其次,vscode可以在Windows也可以在Linux上使用,一次学习终身有用。
- 最重要的是vscode支持多种多样的插件与扩展功能,例如ai代码补全等,拥有传统IDE不具备的灵活性。
- 最后一点就是帅!能显得自己很专业。
基于vscode的C++开发环境配置
1. 下载vscode、浅尝编译。
做这一步前,请先确认你安装了MinGW编译环境。
点击这个链接进入官网进行下载,完成之后进行安装,这里要注意,安装路径不要出现中文!!!。

安装好后我们打开vscode:

(选做,只看就行)此时界面一片漆黑,还有很多看不懂的外国语。我们先不着急进行汉化,来浅尝一下vscode作为文本编辑器的功能,新建一个hello_world.cpp文件,并在其中写入经典开局代码:
#include<iostream>
int main()
{std::cout << "hello world!\n" <<endl;return 0;
}
明摆着告诉你,上面的代码里有些问题(自己去发现)。但是在vscode中显示的效果如下:

我们可以发现,vscode作为一个文本编辑器,对于编程自带高亮功能,这表明它其实是专门设计用来编程的一个文本编辑器。并且重要的是,原生的vscode对于错误代码并没有纠错能力更不要说自动补全功能了。
根据前面的知识,我们可以使用终端运行g++编译器来对上面的代码进行编译:
点击Terminal-->New Terminal在vscode中创建一个终端。

在终端中输入g++ --version查询一下编译器是否存在以及是否好用。如果显示你没有安装编译器,那么可以自行百度一些MinGW(推荐)或者MSVC的安装,十分简单。

输入g++编译指令,对代码进行手工编译:
g++ hello_world.c -o hell_world

如果你代码没改好,那么编译就会报错,显示endl前少了作用域std:: 补上这个部分,运行编译:

发现不再报错,同时我们的文件夹下多了一个hello_world.exe文件,输入:
.\hello_world.exe
执行结果如下,果然输出了hello_world!语句

番外篇
g++编译器利用-c选项可以只编译出.o文件,再通过手工链接的方式将.o·文件链接为.exe可执行文件。

2. 安装插件,赋能编程。
点击最左边的扩展,搜索扩展插件:

C/C++编程安装两个插件即可:
- Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code(汉化包)
- C/C++ Extension Pack(这个包包含了C/C++、C\C++Themes、CMake Tools)
安装完重启后,如下图:

这下我们发现,vscode开始自动纠错了,并且补全等功能也有了,仿佛似乎它已然成为了一个IDE。并且注意右上角新出现的三角形

点击后发现有两个选项:

点击运行C/C++文件,在随后的选项框中选择我们需要的编译器g++:

这样,我们就可以实现代码一键运行功能了。
总结:安装插件后,vscode得以实现自动纠错、代码补全、一键编译、一键调试等功能。
3. 各种json文件的作用。
在Visual Studio Code(VSCode)中,.vs文件夹是一个用于存储与项目相关的配置和临时数据的目录。下面介绍几个重要的.json文件。
c_cpp_properties.json
这个文件主要用来配置C/C++编辑器的自动补全和索引等功能。按下 F1 调出面板,输入 C/C++,选择编辑配置(UI)。
首先找到编译器路径选项,将编译器地址放入:

然后再配置IntelliSense模式,IntelliSense是代码补全工具,将其设置为与编译器兼容的格式,例如这里是gcc-x64。

接下来再配置自动补全的包含路径:包含路径就是#include文件所在的路径,这里面默认有了一个workspaceFolder,代表当前目录下的所有文件,如果使用的库不在当前的工作目录下则需要在这里手动添加进去。

一般情况下,标准库的文件编译器是会自动去寻找的,但有时候标准库文件会提示找不到库,那么就需要在这里手动地把库头文件路径包含进去了。具体查询方式如下:
g++ -v -x c++ -E -

将后面这几行粘贴进去(注意去掉前面的空格)。
最后再设置一下C++标准:

然后我们可以发现,.vs文件夹下多了个文件:c_cpp_properties.json
{"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/**"],"defines": ["_DEBUG","UNICODE","_UNICODE"],"windowsSdkVersion": "10.0.22621.0","cStandard": "c17","cppStandard": "c++17","intelliSenseMode": "windows-gcc-x64","compilerPath": "\"D:\\mingw64\\bin\\g++.exe\""}],"version": 4
}
其实就是把我们在窗口内配置的信息转成了json代码。
task.json
当我们选择了编译器后(点击一键运行),项目配置文件夹.vs下就会生成一个task.json文件。这个文件的内容如下:
{"tasks": [{"type": "cppbuild", "label": "C/C++: g++.exe 生成活动文件", #任务标签(名字)"command": "D:\\mingw64\\bin\\g++.exe", "args": ["-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": { "kind": "build","isDefault": true },"detail": "调试器生成的任务。"}],"version": "2.0.0"
}
task.json文件主要是用来指导编译过程的,其中很重要的两条是:
"command": "D:\\mingw64\\bin\\g++.exe" //这条指定了用哪个编译器。"args": [ //这条指定了编译指令的参数"-fdiagnostics-color=always","-g", //启用调试学习"${file}", //源文件名"-o", //输出文件"${fileDirname}\\${fileBasenameNoExtension}.exe" //输出文件名]
launch.json
launch.jsons是调试配置文件,位于.vscode隐藏文件夹下。生成调试配置文件launch.json的方法很简单:打开vscode左边栏的运行于调试即可创建。

然后选择使用的调试器即可完成创建:

然后可以选择一种调试器的模板:

但是,这里我们需要对launch.json模板修改,代码如下:
{// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"version": "0.2.0","configurations": [{"name": "(gdb) 启动","type": "cppdbg","request": "launch","program": "输入程序名称,例如 ${workspaceFolder}/a.exe",//替换成task.json里生成的可执行文件名字"args": [], //传递给.exe的参数"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "/path/to/gdb","setupCommands": [{"description": "为 gdb 启用整齐打印","text": "-enable-pretty-printing","ignoreFailures": true},{"description": "将反汇编风格设置为 Intel","text": "-gdb-set disassembly-flavor intel","ignoreFailures": true}]"preLaunchTask": "C/C++: gcc.exe 生成活动文件" //换成task.json的label名}]
}
各个参数的意义:
基础参数name
作用: 调试配置的名称,显示在调试启动下拉列表中。
示例: “name”: “Python: Current File”
type
作用: 指定调试器类型,需与安装的调试扩展匹配(如 python, node, go, cppdbg)。
示例: “type”: “python”(使用 Python 扩展调试)
request
作用: 定义调试请求类型:
launch: 启动新程序进行调试(默认)。
attach: 附加到已运行的进程。
示例:"request": "launch"
program
作用: 指定要调试的入口文件路径(适用于编译型或脚本语言)。
示例:"program": "${file}"(调试当前打开的文件)
语言/环境相关参数
args
作用: 传递给程序的命令行参数列表。
示例:
 "args": ["--port", "8080", "--verbose"]
env
作用: 设置调试时的环境变量。
示例:
"env": {"PYTHONPATH": "${workspaceFolder}/src", "DEBUG_MODE": "true"}
cwd
作用: 指定调试器的工作目录(程序运行的根路径)。
示例: “cwd”: “${workspaceFolder}/bin”
高级调试配置
preLaunchTask
作用: 调试前自动执行的任务(需在 tasks.json 中定义)。
任务名要和tasks.json里面的"label"值对应一致
console
作用: 控制调试控制台类型:
internalConsole: VSCode 内置终端(默认)。
integratedTerminal: 使用 VSCode 集成终端。
externalTerminal: 打开外部系统终端。
示例: “console”: “integratedTerminal”
stopOnEntry
作用: 是否在程序入口处自动暂停(用于逐行调试)。
示例: “stopOnEntry”: true
几个注意的点就是:
- program,改成与task.json中一致的
- preLaunchTask改成task.json的label值
配置完成后即可开始程序的调试,例如打断点,查看变量等。
总结&&彩蛋
本篇文章目的在于走通流程,具体的内容例如json文件怎么写,各个参数具体的含义还需要大家自己去查更多的资料。最后,留给大家一个彩蛋,这其实是一个vscode一键配置的程序,具体使用如视频所示。我看了一下,真的确实很方便,希望能带给大家帮助吧!
相关文章:
C++学习之路:从头搞懂配置VScode开发环境的逻辑与步骤
目录 编辑器与IDE基于vscode的C开发环境配置1. 下载vscode、浅尝编译。番外篇 2. 安装插件,赋能编程。3. 各种json文件的作用。c_cpp_properties.jsontask.jsonlaunch.json 总结&&彩蛋 编辑器与IDE 上一篇博客已经介绍过了C程序的一个编译流程,从…...
Web3与网络安全:如何确保去中心化应用的安全性
Web3与网络安全:如何确保去中心化应用的安全性 随着区块链技术的蓬勃发展,Web3的概念逐渐成为互联网发展的新趋势。Web3强调去中心化、用户主权和数据隐私,它的核心是构建一个更加开放、透明和安全的网络环境。然而,随着去中心化…...
插值法笔记 ——武汉理工统计 周
第二章 插值法 插值法定义 插值函数定义 设函数 y f ( x ) y f(x) yf(x) 在区间 [a,b] 上有定义,且满足节点排列: a ≤ x 0 < x 1 < ⋯ < x n ≤ b a \leq x_0 < x_1 < \cdots < x_n \leq b a≤x0<x1<⋯<xn≤b …...
23种设计模式-命令(Command)设计模式
命令设计模式 🚩什么是命令设计模式?🚩命令设计模式的特点🚩命令设计模式的结构🚩命令设计模式的优缺点🚩命令设计模式的Java实现🚩代码总结🚩总结 🚩什么是命令设计模式…...
和鲸科技执行总裁殷自强受邀主讲华中附属同济医院大模型应用通识首期课程
当前,医学与人工智能的深度融合正迎来历史性发展机遇。华中科技大学同济医学院附属同济医院(以下简称“同济医院”)作为医疗人工智能应用的先行探索者,已在电子病历辅助书写、科研数据分析、医疗合同自动化审核等关键场景完成试点…...
CI/CD(三) 安装nfs并指定k8s默认storageClass
一、NFS 服务端安装(主节点 10.60.0.20) 1. 安装 NFS 服务端 sudo apt update sudo apt install -y nfs-kernel-server 2. 创建共享目录并配置权限 sudo mkdir -p /data/k8s sudo chown nobody:nogroup /data/k8s # 允许匿名访问 sudo chmod 777 /dat…...
Centos 7 安装VNC服务
Centos 7 安装VNC服务 1. 安装 TigerVNC2. 设置 VNC 密码3. 创建并配置 x0vncserver 服务4. 启用并启动服务5. 检查服务状态6. 配置防火墙7. 连接 VNC问题1:出现无法安装可能是镜像源导致的。手动配置镜像源清除 YUM 缓存并重新加载 1. 安装 TigerVNC 确保已安装 TigerVNC 服务…...
使用 Go 构建 MCP Server
一个互联网技术玩家,一个爱聊技术的家伙。在工作和学习中不断思考,把这些思考总结出来,并分享,和大家一起交流进步。 一、MCP 介绍 1. 基本介绍 MCP(Model Context Protocol,模型上下文协议)是…...
C语言贪吃蛇实现
When the night gets dark,remember that the Sun is also a star. 当夜幕降临时,请记住太阳也是一颗星星。 ————《去月球海滩篇》 目录 文章目录 一、《贪吃蛇》游戏介绍 二、WIN32部分接口简单介绍 2.1 控制台窗口大小设置 2.2 命令行窗口的名称的变更 2…...
pytorch小记(十五):pytorch中 交叉熵损失详解:为什么logits比targets多一个维度?
pytorch小记(十五):pytorch中 交叉熵损失详解:为什么logits比targets多一个维度? PyTorch交叉熵损失详解:为什么logits比targets多一个维度?一、前言:新手常见困惑二、核心概念&…...
利用zabbix自带key获取数据
获取数据的三种方法 1、链接模版 服务器系统自身的监控 CPU CPU使用率、CPU负载 内存 内存剩余量 硬盘 关键性硬盘的剩余量、IO 网卡 流量/IO(流入流量、流出流量、总流量、错误数据包流量) 进程数 用户数 2、利用zabbix自带的键值key 1)监…...
无人机数据处理系统设计要点与难点!
一、系统设计要点 无人机数据处理系统需要高效、可靠、低延迟地处理多源异构数据(如影像、传感器数据、位置信息等),同时支持实时分析和长期存储。以下是核心设计要点: 1.数据采集与预处理 多传感器融合:集成摄像头…...
最大异或对 The XOR Largest Pair
题目来自洛谷网站: 思路: 两个循环时间复杂度太高了,会超时。 我们可以先将读入的数字,插入到字典树中,从高位到低位。对每个数查询的时候,题目要求是最大的异或对,所以我们选择相反的路径&am…...
基于SpringBoot + Vue 的汽车租赁管理系统
技术介绍: ①:架构: B/S、MVC ②:系统环境:Windows/Mac ③:开发环境:IDEA、JDK1.8、Maven、Mysql ④:技术栈:Java、Mysql、SpringBoot、Mybatis、Vue 项目功能: 角色&am…...
基于DrissionPage的TB商品信息采集与可视化分析
一、项目背景 随着电子商务的快速发展,淘宝作为中国最大的电商平台之一,拥有海量的商品信息。这些数据对于市场分析、用户行为研究以及竞争情报收集具有重要意义。然而,由于淘宝的反爬虫机制和复杂的页面结构,直接获取商品信息并不容易。尤其是在电商行业高速发展的今天,商…...
电气、电子信息与通信工程的探索与应用
从传统定义来看,电气工程是现代科技领域的核心学科和关键学科。它涵盖了创造产生电气与电子系统的有关学科的总和。然而,随着科学技术的飞速发展,电气工程的概念已经远超出这一范畴。 电子信息工程则是将电子技术、通信技术、计算机技术等应…...
Python备赛笔记2
1.区间求和 题目描述 给定a1……an一共N个整数,有M次查询,每次需要查询区间【L,R】的和。 输入描述: 第一行包含两个数:N,M 第二行输入N个整数 接下来的M行,每行有两个整数,L R,中间用空格隔开&…...
HTML5 拖放(Drag and Drop)学习笔记
一、HTML5 拖放简介 HTML5 拖放(Drag and Drop)是HTML5标准的一部分,允许用户抓取一个对象并将其拖动到另一个位置。拖放功能在现代网页中非常常见,例如文件上传、任务管理、布局调整等场景。 HTML5 拖放功能支持以下浏览器&…...
Sass (Scss) 与 Less 的区别与选择
Sass 与 Less 的区别与选择 1. 语法差异2. 特性与支持3. 兼容性4. 选择建议 在前端开发中,CSS预处理器如Sass(Syntactically Awesome Stylesheets)和Less被广泛使用,它们通过引入变量、嵌套规则、混合、函数等特性,使C…...
Unity2022发布Webgl2微信小游戏部分真机黑屏
复现规律: Unity PlayerSetting中取消勾选ShowSplashScreen 分析: 在Unity中,Splash Screen(启动画面) 不仅是视觉上的加载动画,还承担了关键的引擎初始化、资源预加载和渲染环境准备等底层逻辑。禁用后导…...
记一次线上SQL死锁事故
一、 引言 SQL死锁是一个常见且复杂的并发控制问题。当多个事务在数据库中互相等待对方释放锁时,就会形成死锁,从而导致事务无法继续执行,影响系统的性能和可用性。死锁不仅会导致数据库操作的阻塞,增加延迟,还可能对…...
Java并发编程 什么是分布式锁 跟其他的锁有什么区别 底层原理 实战讲解
目录 一、分布式锁的定义与核心作用 二、分布式锁与普通锁的核心区别 三、分布式锁的底层原理与实现方式 1. 核心实现原理 2. 主流实现方案对比 3. 关键技术细节 四、典型问题与解决方案 五、总结 六、具体代码实现 一、分布式锁的定义与核心作用 分布式锁是一种在分布…...
【react】在react中async/await一般用来实现什么功能
目录 基本概念 工作原理 优点 注意事项 底层原理 实际应用场景 1. 数据获取 (API 请求) 2. 表单提交 3. 异步状态管理 4. 异步路由切换 5. 异步数据预加载 6. 第三方 API 调用 7. 文件上传/下载 8. 路由导航拦截 关键注意事项 基本概念 async 函数:用…...
Axure项目实战:智慧城市APP(六)市民互动(动态面板、显示与隐藏)
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:市民互动 主要内容:动态面板、显示与隐藏交互应用 应用场景:AI产品交互、互动类应用 案例展示: 案例视频&am…...
为何服务器监听异常?
报错: 执行./RCF后出现监听异常--在切换网络后,由于前面没有退出./RCF执行状态;重新连接后,会出现服务器监听异常 原因如下: 由于刚开始登录内网,切换之后再重新登录内网,并且切换网络的过程中…...
1.认识Excel
一 Excel 可以用来做什么 二 提升技巧 1.数据太多 2.计算太累 3.提升数据的价值和意义 4.团队协作 三 学习目标 学习目标不是为了掌握所有的技能,追逐新功能。而是学知识来解决需求,如果之前的技能和新出的技能都可以解决问题,那不学新技能也…...
目标跟踪——deepsort算法详细阐述
deepsort 算法详解 Unmatched Tracks(未匹配的轨迹) 本质角色: 是已存在的轨迹在当前帧中“失联”的状态,即预测位置与检测结果不匹配。 生命周期阶段: 已初始化: 轨迹已存在多帧,可能携带历史信息(如外观特征、运动模型)。 未被观测到: 当前帧中未找到对应的检测框…...
AI Agent 是什么?从 Chatbot 到自动化 Agent(LangChain、AutoGPT、BabyAGI)
1. 引言:AI Agent 的演进 AI Agent(人工智能智能体)是 AI 发展的重要方向之一。早期的 AI 主要以 Chatbot 形式存在,如客服机器人、智能助手等,主要基于 NLP 技术进行任务处理。而随着大模型(LLM)能力的提升,AI Agent 逐步演进为能够自主执行任务的智能体,如 AutoGPT…...
ngx_http_core_root
定义在 src\http\ngx_http_core_module.c static char * ngx_http_core_root(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) {ngx_http_core_loc_conf_t *clcf conf;ngx_str_t *value;ngx_int_t alias;ngx_uint_t …...
python康复日记-request库的使用,爬虫自动化测试
一,request的简单应用 #1请求地址 URLhttps://example.com/login #2参数表单 form_data {username: admin,password: secret } #3返回的响应对象response response requests.post(URL,dataform_data,timeout5 ) #4处理返回结果,这里直接打印返回网页的…...
