使用Visual Studio Code配置C/C++开发环境的全面指南
目录
引言
一、准备工作
1. 安装Visual Studio Code
2. 安装C/C++编译器
3. 配置环境变量(仅Windows用户)
二、在VS Code中安装C/C++扩展
三、创建您的第一个C/C++项目
1. 创建项目文件夹
2. 打开项目文件夹
3. 创建源文件
四、配置任务(Tasks)以编译代码
1. 创建tasks.json文件
2. 编辑tasks.json
3. 编译代码
五、配置调试环境
1. 创建launch.json文件
2. 编辑launch.json
3. 开始调试
六、配置IntelliSense(代码智能提示)
1. 创建c_cpp_properties.json
2. 配置编译器路径和包含路径
3. 验证IntelliSense功能
七、完整的配置文件示例
1. tasks.json
八、常见问题及解决方案
1. 编译时找不到g++命令
2. 调试时无法启动gdb
3. IntelliSense不起作用
4. 无法设置断点或断点无效
九、总结
结语
引言
Visual Studio Code(简称VS Code)是一款由微软开发的免费、开源、跨平台的代码编辑器。凭借其轻量级、高度可定制和丰富的扩展功能,VS Code已成为许多开发者的首选工具。本指南将详细介绍如何在VS Code中配置C/C++开发环境,包括编译、调试和代码补全等功能,希望能帮助您快速上手。
一、准备工作
1. 安装Visual Studio Code
首先,您需要从Visual Studio Code官方网站下载并安装适用于您操作系统的版本。VS Code支持Windows、macOS和Linux平台。
2. 安装C/C++编译器
- Windows用户:建议安装MinGW-w64,这是一个Windows平台的GCC编译器集合。或者,您也可以安装Microsoft Visual C++ Build Tools。
- macOS用户:可以通过命令
xcode-select --install
安装Xcode命令行工具,其中包含了Clang编译器。 - Linux用户:一般情况下,系统已经预装了GCC编译器。如果没有,可以通过包管理器安装,例如在Ubuntu上运行
sudo apt-get install build-essential
。
3. 配置环境变量(仅Windows用户)
确保将编译器的bin
目录添加到系统的环境变量PATH
中,以便在命令行中直接调用gcc
或g++
命令。
二、在VS Code中安装C/C++扩展
打开VS Code,点击左侧活动栏中的扩展(Extensions)图标,在搜索栏中输入C/C++
,找到由Microsoft提供的官方扩展并安装。
三、创建您的第一个C/C++项目
1. 创建项目文件夹
在您的计算机上创建一个新的文件夹,用于存放您的C/C++项目文件。例如,D:\Projects\HelloWorld
。
2. 打开项目文件夹
在VS Code中,点击文件
-> 打开文件夹
,选择您刚刚创建的项目文件夹。
3. 创建源文件
在项目文件夹中创建一个新的源文件:
- 对于C语言,创建
main.c
。 - 对于C++语言,创建
main.cpp
。
在文件中输入以下示例代码:
#include <iostream>int main() {std::cout << "Hello, World!" << std::endl;return 0;
}
四、配置任务(Tasks)以编译代码
为了在VS Code中编译代码,我们需要配置任务。
1. 创建tasks.json
文件
按下Ctrl+Shift+B
(macOS上为Cmd+Shift+B
),如果没有配置任务,VS Code会提示您创建一个。选择Create tasks.json file from template
,然后选择Others
。
2. 编辑tasks.json
将tasks.json
内容修改为以下内容:
{"version": "2.0.0","tasks": [{"label": "编译C++程序","type": "shell","command": "g++","args": ["-g","${file}","-o","${fileDirname}/${fileBasenameNoExtension}.exe"],"group": {"kind": "build","isDefault": true},"problemMatcher": ["$gcc"]}]
}
说明:
command
:指定使用g++
命令进行编译。args
:传递给g++
的参数。-g
:生成调试信息。${file}
:当前打开的文件。-o
:指定输出文件。${fileDirname}/${fileBasenameNoExtension}.exe
:生成的可执行文件名。
group
:将此任务设置为默认的构建任务。problemMatcher
:用于在编译错误时解析错误信息。
3. 编译代码
按下Ctrl+Shift+B
,VS Code将执行您刚刚配置的编译任务。如果一切正常,您将在项目文件夹中看到生成的可执行文件。
五、配置调试环境
为了在VS Code中调试程序,我们需要配置launch.json
文件。
1. 创建launch.json
文件
点击调试图标(左侧活动栏中的虫子图标),然后点击创建launch.json文件
,选择C++ (GDB/LLDB)
。
2. 编辑launch.json
将launch.json
内容修改为以下内容:
{"version": "0.2.0","configurations": [{"name": "调试C++程序","type": "cppdbg","request": "launch","program": "${fileDirname}/${fileBasenameNoExtension}.exe","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "gdb","setupCommands": [{"description": "启用调试打印","text": "-enable-pretty-printing","ignoreFailures": true}]}]
}
说明:
program
:指定要调试的程序路径。miDebuggerPath
:gdb
的路径。如果未添加到PATH
环境变量,需要填写完整路径。MIMode
:使用gdb
作为调试器。
3. 开始调试
在源代码中设置断点(点击行号左侧的空白区域),然后按下F5
启动调试。
六、配置IntelliSense(代码智能提示)
VS Code的C/C++扩展提供了IntelliSense功能,但需要正确配置。
1. 创建c_cpp_properties.json
点击Ctrl+Shift+P
(macOS上为Cmd+Shift+P
),输入C/C++: Edit Configurations (JSON)
,创 建或打开c_cpp_properties.json
文件。
2. 配置编译器路径和包含路径
将c_cpp_properties.json
修改为:
{"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/**","C:/MinGW/include"],"defines": [],"compilerPath": "C:/MinGW/bin/g++.exe","cStandard": "c17","cppStandard": "c++17","intelliSenseMode": "windows-gcc-x64"}],"version": 4
}
说明:
includePath
:指定头文件的搜索路径。compilerPath
:指定编译器的路径。cStandard
和cppStandard
:指定C和C++的标准版本。intelliSenseMode
:指定IntelliSense的模式。
3. 验证IntelliSense功能
保存配置文件后,返回源代码编辑器,尝试输入代码,应该会有代码补全和语法提示。
七、完整的配置文件示例
1. tasks.json
{"version": "2.0.0","tasks": [{"label": "编译C++程序","type": "shell","command": "g++","args": ["-g","${file}","-o","${fileDirname}/${fileBasenameNoExtension}.exe"],"group": "build","problemMatcher": ["$gcc"]}]
}
2. launch.json
{"version": "0.2.0","configurations": [{"name": "调试C++程序","type": "cppdbg","request": "launch","program": "${fileDirname}/${fileBasenameNoExtension}.exe","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "gdb","setupCommands": [{"description": "启用调试打印","text": "-enable-pretty-printing","ignoreFailures": true}]}]
}
3. c_cpp_properties.json
{"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/**","C:/MinGW/include"],"defines": [],"compilerPath": "C:/MinGW/bin/g++.exe","cStandard": "c17","cppStandard": "c++17","intelliSenseMode": "windows-gcc-x64"}],"version": 4
}
八、常见问题及解决方案
1. 编译时找不到g++
命令
解决方案:确保已将编译器的bin
目录添加到系统环境变量PATH
中。重启VS Code和终端以使更改生效。
2. 调试时无法启动gdb
解决方案:确保gdb
已安装并添加到PATH
中。如果使用MinGW-w64,可以在安装时选择包含gdb
。
3. IntelliSense不起作用
解决方案:检查c_cpp_properties.json
中的includePath
和compilerPath
是否正确,尤其是路径中的斜杠方向和大小写。
4. 无法设置断点或断点无效
解决方案:确保在编译时使用了-g
选项生成调试信息。检查launch.json
中的配置是否正确。
九、总结
通过以上步骤,您已经在VS Code中成功配置了C/C++的开发环境,包括编译、调试和IntelliSense功能。以下是本次内容的关键要点总结:
步骤 | 要点 |
---|---|
安装必要工具 | VS Code、C/C++编译器、相关扩展 |
配置环境变量 | 将编译器路径添加到PATH (Windows) |
创建项目和文件 | 创建项目文件夹,编写源代码 |
配置编译任务 | 编辑tasks.json ,定义编译命令和参数 |
配置调试环境 | 编辑launch.json ,设置调试器和程序路径 |
配置IntelliSense | 编辑c_cpp_properties.json ,完善代码提示 |
常见问题解决 | 处理编译器路径、调试器、IntelliSense等问题 |
结语
在VS Code中配置C/C++开发环境可能需要一些初始设置,但一旦配置完成,您将享受到这款编辑器带来的高效开发体验。希望本指南能帮助您顺利搭建环境,开启您的C/C++编程之旅。
相关文章:

使用Visual Studio Code配置C/C++开发环境的全面指南
目录 引言 一、准备工作 1. 安装Visual Studio Code 2. 安装C/C编译器 3. 配置环境变量(仅Windows用户) 二、在VS Code中安装C/C扩展 三、创建您的第一个C/C项目 1. 创建项目文件夹 2. 打开项目文件夹 3. 创建源文件 四、配置任务(…...

算法练习题26——多项式输出(模拟)
输入格式 输入共有 2 行 第一行 1 个整数,n,表示一元多项式的次数。 第二行有 n1 个整数,其中第 i 个整数表示第 n−i1 次项的系数,每两个整数之间用空格隔开。 输出格式 输出共 1 行,按题目所述格式输出多项式。…...

卷积神经网络经典模型架构简介
【图书推荐】《PyTorch深度学习与企业级项目实战》-CSDN博客 《PyTorch深度学习与企业级项目实战(人工智能技术丛书)》(宋立桓,宋立林)【摘要 书评 试读】- 京东图书 (jd.com) ImageNet是一个包含超过1 500万幅手工标记的高分辨率图像的数据…...

【Kubernetes】常见面试题汇总(十三)
目录 39.简述 Kubernetes Scheduler 使用哪两种算法将 Pod 绑定到 worker 节点? 40.简述 Kubernetes kubelet 的作用? 41.简述 Kubernetes kubelet 监控 Worker 节点资源是使用什么组件来实现的? 39.简述 Kubernetes Scheduler 使用哪两种算…...

嵌入式QT开发:构建高效智能的嵌入式系统
摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面…...

Linux抢占调度
目录 抢占流程 抢占时机 用户态抢占时机 1、 从系统调用返回用户空间 2、 从中断返回用户空间 内核态抢占时机 1、中断处理程序返回内核空间 可以看到最终是到了 preempt_schedule_irq 2、当内核从non-preemptible(禁止抢占)状态变成pr…...

k8s中,为什么把pod的服务以deployment的形式通过nodeport对外发布,以及容器和虚拟机的一些区别
deployment是个控制器 主要负责管理pod,来代表k8s集群向外提供稳定的服务。 说,k8s有很多优点。 说k8s的优点,可能先需要说容器提供的便利。 同样的硬件资源 跑几个虚拟机,每个虚拟机上跑几个服务。 就挺重了。风扇呼呼叫 …...

PMP--一模--解题--41-50
文章目录 14.敏捷--方法--回顾--回顾是最重要的一个实践,原因是它能让团队学习、改进和调整其过程。41、 [单选] 新项目中的所有团队成员都希望通过尽快交付价值来获得客户的信任。项目经理了解到一个资源已经在其他项目中与发起人一起工作。某资源似乎在使用个人影…...

Kafka启动关闭及其相关命令kafka启动、状态监控、日常操作
开启zookeeper命令(备注:先进入zookeeper的bin目录) ./zkServer.sh start 关闭zookeeper命令(备注:先进入zookeeper的bin目录) ./zkServer.sh stop Kafka启动命令(备注:先进入kafka目录) 常规模式启动kafka bin/kafka-server-start.sh config/server.properties 进程守…...

CentOS 系统设置与维护教程
CentOS 系统设置与维护教程 在这篇博客中,我们将介绍在 CentOS 系统上进行的一些常见操作,包括停止和禁用防火墙服务、配置 SELinux。我们还将展示如何切换到 root 用户以执行这些操作。通过这些操作,你可以更好地管理和配置你的 CentOS 环境…...

流量牵引技术与传统防火墙的区别
在网络安全领域,流量牵引技术和传统防火墙都起着重要的作用,但它们在很多方面存在着明显的区别。 一、工作原理不同 传统防火墙主要是通过设置访问控制规则来过滤网络流量。它基于预先设定的策略,对进入和离开网络的数据包进行检查…...

【Python爬虫系列】_020.异步协程asyncio
课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈…...

ubuntu22安装docker
1、查看服务器系统信息 uname -a:显示内核名称、主机名、内核版本、处理器类型等信息。 lsb_release -a:显示有关 Ubuntu 发行版的详细信息,包括版本号、代号等。 free -h:查看系统内存使用情况。 df -h:查看磁盘空间使…...

【拥抱AI】如何使用Pandas进行数据分段
安装Pandas库 如果您的环境中尚未安装Pandas库,可以使用pip命令进行安装: pip install pandas导入Pandas库 在Python脚本中,导入Pandas库以便使用其数据处理功能: import pandas as pd读取文本文件 使用Pandas的read_csv函数…...

Docker Compose version v2.29.2 提示 exited with code 0 解决方案
问题描述: 使用 docker-compose up 启动容器时,老是报错exited with code 0,容器要么处于退出,要么处于重启阶段,查明原因后,是因为docker容器执行任务完成后就会处于exited状态,必须强制状态。…...

深度学习速通系列:依存分析
依存分析(Dependency Parsing)是自然语言处理(NLP)中的一项任务,目的是确定句子中单词之间的依存关系,并将这些关系表示为一个有向图,通常称为依存树。在依存树中,每个节点代表一个单…...

玩转扩展库,温湿度传感器篇!—合宙Air201资产定位模组LuatOS快速入门05
随着LuatOS快速入门系列教程的推出,小伙伴们学习热情高涨。 合宙Air201不仅支持三种定位方式,还具有丰富的扩展功能,通过外扩BTB链接方案,最多可支持21个IO接口:SPI、I2C、UART等多种接口全部支持。 本期,…...

【人工智能】人工智能领域中的线性回归算法原理、应用场景及代码示例。
🏆🏆欢迎大家来到我们的天空🏆🏆 🏆🏆如果文章内容对您有所触动,别忘了点赞、关注,收藏! 🏆 作者简介:我们的天空 🏆《头衔》&#x…...

day18JS-微任务、宏任务和node.js
1. 代码的执行流程 代码的执行流程分为同步与异步。 2. 什么样子的是宏任务? 1. setTimeout 和 setInterval 定时器: 没有写时间(传参的),代表下一帧执行,如果没有其他任务1ms后执行。 // 没有写时间(传参的),代表下…...

Mega Stamp Bundle 地形合集捆绑包峡谷沙丘山脉
终极套装,满足所有地形雕刻需求! 自2015年Gaia发布以来,我们团队就发明了印章技术,欢迎来到Mega Stamp Bundle! 本套装包含14个印章包,单次购买即可享受大幅折扣,共获得140个专业设计的印章。 这些印章可与Unity Terrain Tools、Gaia以及任何使用印章高度图图像的工具…...

基于SpringBoot+Vue+MySQL的明星周边产品销售网站系统
系统展示 用户前台界面 管理员后台界面 系统背景 在当今数字化消费时代,粉丝经济蓬勃发展,明星周边产品作为连接明星与粉丝的重要纽带,市场需求日益增长。为了满足广大粉丝对明星周边产品的热情追求,并提升购物体验,我…...

websocket 和sip 在协议层面有哪些区别,为什么要各自这样设置协议
WebSocket 和 SIP(Session Initiation Protocol)在协议层面有显著区别,因为它们各自的设计目标和用途不同。让我们从协议的定义、工作方式和用途来讨论这些区别: 1. 协议定义与用途 WebSocket: WebSocket 是一种通信协议,旨在通过单个 TCP 连接实现全双工通信。它用于在客…...

Miracast/WifiDisplay开发相关的深入调研分析-android投屏实战开发
Miracast/WifiDisplay概念介绍 Miracast Miracast是由Wi-Fi联盟于2012年所制定,以Wi-Fi直连(Wi-Fi Direct)为基础的无线显示标准。支持此标准的消费性电子产品(又称3C设备)可透过无线方式分享视频画面,例如…...

linux入门到实操-4 linux系统网络配置、连接测试、网络连接模式、修改静态IP、配置主机名
教程来源:B站视频BV1WY4y1H7d3 3天搞定Linux,1天搞定Shell,清华学神带你通关_哔哩哔哩_bilibili 整理汇总的课程内容笔记和课程资料(包含课程同版本linux系统文件等内容),供大家学习交流下载:…...

【kubernetes】Ingress和Ingress-Controller介绍,高可用应用案例
一,Ingress介绍 Ingress是k8s中一种重要的资源对象,它主要用于定义从集群外部到集群内部服务的HTTP(S)路由规则。用于管理代理 Ingress-Controller的配置文件。 kubectl explain ingress二,Ingress-Controller介绍 Ingress Controller 是 …...

C# 使用Socket通信,新建WinForm服务端、客户端程序
一、新建WinForm Socket服务端程序 注:rtbReceviceMsg为RichTextBox控件 服务端程序、界面 服务端代码 public partial class Form1 : Form {public Form1(){InitializeComponent();}public virtual void TriggerOnUpdateUI(string message){if (this.InvokeRequir…...

Kamailio-基于Homer与heplify的SIP信令监控-2
接上篇,我们已经顺利地完成了服务的安装,下面就来看看如何配置并启动。 跟着我,你将学会: 下载并安装 踩坑:按照官方步骤来,可是网络条件不允许 获取YUM源下载RPM包手动解压安装避坑 配置并启动…...

unity3d入门教程四
unity3d入门教程四 10.1坐标与旋转10.2物体的运动10.3(练习)掉头飞行11.1向量11.2向量间运算11.3向量夹角11.4物体的指向11.5(练习)飞向目标12.1屏幕坐标12.2屏幕的边界 10.1坐标与旋转 比如,节点的坐标用 Vector3 类型…...

无人机飞控的原理!!!
一、传感器系统 陀螺仪:用于检测无人机的角速度和角度,帮助确定无人机的姿态。 加速度计:用于检测无人机的加速度和倾斜角度,进一步辅助姿态判断。 磁力计(或罗盘):用于检测无人机的方向&…...

深入解析代理模式:静态代理、JDK 动态代理和 CGLIB 的全方位对比!
代理模式(Proxy Pattern)是一种结构型设计模式,它提供了对象的替身,即代理对象来控制对实际对象的访问。通过代理对象,可以在不修改目标对象的情况下,扩展或控制其功能。例如,代理模式可以用于延…...