当前位置: 首页 > article >正文

VSCode C/C++ 环境搭建指南

一、前言

Visual Studio Code(简称 VSCode)是一款轻量级且功能强大的跨平台代码编辑器,凭借丰富的插件生态和高度的可定制性,深受开发者喜爱。对于 C/C++ 开发者而言,在 VSCode 中搭建开发环境,能够获得灵活且高效的编程体验。接下来,将为你详细介绍在不同操作系统下,如何在 VSCode 中搭建 C/C++ 开发环境。

二、安装 VSCode

VSCode 支持 Windows、Linux 和 macOS 等主流操作系统,你可以通过以下步骤进行安装:

  1. 访问官网:打开VSCode 官方网站。
  2. 下载安装包:根据你的操作系统,点击对应的下载按钮(如 “Download for Windows”“Download for macOS”“Download for Linux”) ,下载适合你系统的安装包。
  3. 安装软件
    • Windows:下载完成后,双击.exe文件,按照安装向导的提示进行操作,你可以选择安装目录,也可使用默认安装目录,一路点击 “下一步” 直至安装完成。
    • macOS:下载的是.dmg文件,打开后,将 VSCode 图标拖动到 “应用程序” 文件夹即可完成安装。
    • Linux:不同的 Linux 发行版安装方式略有不同。以 Ubuntu 为例,下载.deb包后,在终端中使用sudo dpkg -i <下载的.deb文件名>命令进行安装;若下载的是压缩包,则解压后找到可执行文件运行。

三、安装 C/C++ 编译器

(一)Windows 系统

  1. MinGW-w64
    • 下载:访问 MinGW-w64 官网https://sourceforge.net/projects/mingw-w64/ ,下载适合你系统的版本(一般 64 位系统选择x86_64 ,32 位系统选择i686)。
    • 安装:下载完成后,解压压缩包,记住解压后的路径(例如C:\mingw-w64)。
    • 配置环境变量:右键点击 “此电脑”,选择 “属性”,在弹出的窗口中点击 “高级系统设置”,再点击 “环境变量”。在 “系统变量” 中找到 “Path” 变量,点击 “编辑”,然后点击 “新建”,将C:\mingw-w64\x86_64-8.1.0-win32-seh-rt_v6-rev0\mingw64\bin(路径根据你实际解压路径调整)添加进去,点击 “确定” 保存设置。
    • 验证安装:打开命令提示符(CMD),输入gcc -vg++ -v ,若能显示版本信息,说明安装成功。
  2. TDM-GCC
    • 下载:访问TDM-GCC官网 ,根据系统选择合适的安装包(如 64 位系统选择tdm64-gcc-10.3.0-2.exe) 。
    • 安装:双击安装包,按照安装向导的提示进行操作,一般保持默认设置,点击 “Next” 和 “Install” 即可完成安装。
    • 验证安装:在命令提示符中输入gcc --version ,若显示版本信息,则安装成功。

(二)macOS 系统

macOS 系统通常自带 Clang 编译器,你可以通过以下步骤验证:
打开终端,输入clang -v ,若能显示版本信息,说明已经安装。如果没有安装,可通过安装 Xcode Command Line Tools 来获取。在终端中输入xcode-select --install ,按提示操作即可完成安装。

(三)Linux 系统

大多数 Linux 发行版默认安装了 GCC 编译器。你可以在终端中输入gcc -v来验证是否安装。若未安装,可使用包管理器进行安装:

  • Ubuntu/Debian:在终端中输入sudo apt-get install gcc g++ 。
  • CentOS/RHEL:在终端中输入sudo yum install gcc gcc-c++ 。

四、安装必要的 VSCode 插件

打开 VSCode,点击左侧边栏的插件图标(或使用快捷键Ctrl+Shift+X ),在搜索框中搜索并安装以下插件:

  1. Chinese (Simplified) Language Pack for Visual Studio Code:将 VSCode 界面语言设置为简体中文,方便使用。
  2. C/C++ :由 Microsoft 提供的官方插件,为 VSCode 添加对 C/C++ 语言的全面支持,包括智能代码补全、语法高亮、调试等功能。
  3. Code Runner:安装后,可通过右键菜单中的 “Run Code” 选项,一键编译和运行 C/C++ 代码,无需手动在终端输入编译命令,提高开发效率。

五、配置 VSCode

(一)Windows 和 Linux 系统

  1. 创建工作文件夹:在本地创建一个文件夹用于存放 C/C++ 项目,例如C:\cpp_projects (Windows)或~/cpp_projects (Linux)。在 VSCode 中,点击菜单栏的 “文件” -> “打开文件夹” ,选择刚刚创建的文件夹。
  2. 配置 tasks.json 文件:按下Ctrl+Shift+P ,输入 “Tasks: Configure Task” ,选择 “C/C++: g++ build active file”(如果是 C 语言则选择 “C/C++: gcc build active file”)。这将在工作文件夹下的.vscode文件夹中生成一个tasks.json文件,其内容如下:
{"version": "2.0.0","tasks": [{"label": "build","type": "shell","command": "g++", // C语言使用“gcc”"args": ["-g","${file}","-o","${fileDirname}/${fileBasenameNoExtension}.exe"],"group": {"kind": "build","isDefault": true}}]
}

这个文件定义了一个构建任务,使用g++(或gcc)编译器对当前打开的文件进行编译,并生成可执行文件。
3. 配置 launch.json 文件:按下F5进行调试,此时 VSCode 会提示配置调试环境,选择 “C/C++ (GDB/LLDB)” ,这将在.vscode文件夹中生成一个launch.json文件,内容如下:

{"version": "0.2.0","configurations": [{"name": "(gdb) Launch","type": "cppdbg","request": "launch","program": "${fileDirname}/${fileBasenameNoExtension}.exe","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": true,"MIMode": "gdb","preLaunchTask": "build"}]
}

该文件配置了调试会话,指定了要调试的程序路径、命令行参数等信息,并设置在调试前先执行tasks.json中定义的构建任务。

(二)macOS 系统

  1. 创建工作文件夹:同 Windows 和 Linux 系统,在本地创建一个用于存放项目的文件夹,并在 VSCode 中打开。
  2. 配置 tasks.json 文件:按下Ctrl+Shift+P ,输入 “Tasks: Configure Task” ,选择 “C/C++: clang++ build active file”(如果是 C 语言则选择 “C/C++: clang build active file”)。生成的tasks.json文件内容如下:
{"version": "2.0.0","tasks": [{"label": "build","type": "shell","command": "clang++", // C语言使用“clang”"args": ["-g","${file}","-o","${fileDirname}/${fileBasenameNoExtension}"],"group": {"kind": "build","isDefault": true}}]
}
  1. 配置 launch.json 文件:按下F5进行调试,选择 “C/C++ (GDB/LLDB)” ,生成的launch.json文件内容如下:
{"version": "0.2.0","configurations": [{"name": "(lldb) Launch","type": "cppdbg","request": "launch","program": "${fileDirname}/${fileBasenameNoExtension}","args": [],"stopAtEntry": false,"cwd": "${workspaceFolder}","environment": [],"externalConsole": true,"MIMode": "lldb","preLaunchTask": "build"}]
}

这里使用lldb作为调试器,与 macOS 系统的 Clang 编译器配合使用。

六、测试环境

在工作文件夹中创建一个新的 C/C++ 文件,例如hello.cpp(C++)或hello.c(C) ,输入以下测试代码:

C++ 示例

#include <iostream>
using namespace std;int main() {cout << "Hello, World!" << endl;return 0;
}

C 示例

#include <stdio.h>int main() {printf("Hello, World!\n");return 0;
}

保存文件后,你可以通过以下两种方式运行代码:

  • 使用 Code Runner 插件:右键点击代码编辑区域,选择 “Run Code” ,插件会自动编译并运行代码,在下方的输出窗口中显示结果。
  • 使用调试功能:按下F5 ,VSCode 会根据launch.jsontasks.json的配置,先编译代码,然后运行可执行文件,并在调试控制台中显示输出结果。如果设置了断点,程序会在断点处暂停,方便调试。

七、常见问题及解决方法

  1. 编译器未找到:如果在运行或调试时提示找不到编译器,首先确认编译器已正确安装且环境变量配置正确。在 Windows 系统中,可以在命令提示符中输入编译器命令(如gcc -v) ,检查是否能正常显示版本信息。若不能,重新检查环境变量配置。在 Linux 和 macOS 系统中,同样在终端中检查编译器命令是否可用。
  2. 调试配置不生效:检查launch.jsontasks.json文件的配置是否正确,特别是路径、命令和参数等信息。确保preLaunchTask指定的构建任务能够成功执行。
  3. 代码无法编译通过:仔细检查代码中的语法错误,VSCode 的 C/C++ 插件会在编辑过程中通过波浪线提示一些常见的语法问题。另外,注意头文件的包含是否正确,以及命名空间的使用等。
  4. 中文乱码问题:在 VSCode 中,点击左下角的齿轮图标,选择 “设置” ,在搜索框中输入 “files.encoding” ,确保其值为utf-8。如果问题仍然存在,检查文件的保存编码和编译器的字符集设置。

相关文章:

VSCode C/C++ 环境搭建指南

一、前言 Visual Studio Code&#xff08;简称 VSCode&#xff09;是一款轻量级且功能强大的跨平台代码编辑器&#xff0c;凭借丰富的插件生态和高度的可定制性&#xff0c;深受开发者喜爱。对于 C/C 开发者而言&#xff0c;在 VSCode 中搭建开发环境&#xff0c;能够获得灵活…...

Python-docx库详解:轻松实现Word文档自动化生成与图片尺寸控制

Python-docx库详解&#xff1a;轻松实现Word文档自动化生成与图片尺寸控制 在现代办公自动化的浪潮中&#xff0c;文档处理是一项不可或缺的任务。Python作为一种强大的编程语言&#xff0c;提供了丰富的库来简化这些任务。其中&#xff0c;python-docx库是处理Word文档的有力…...

Python大疆导出csv文件转化大地2000的dxf文件

大疆导出三维模型里面有个models\pc\0\terra_grid\csv\terra_grid.csv文件&#xff0c;里面记录所有点的坐标和高程&#xff0c;但坐标是经纬度坐标&#xff0c;需要转化为大地2000坐标。 我参照了&#xff1a;经纬度坐标转换为CGCS2000大地坐标系对应XY值&#xff08;PYTHON实…...

Python 中下划线 “_” 的多面性:从变量到约定

# Python中下划线“_”的多面性&#xff1a;从变量到约定 在Python的语法体系里&#xff0c;下划线“_”看似毫不起眼&#xff0c;实则扮演着极为重要且多样化的角色。它不仅能作为普通变量参与编程&#xff0c;更在多个特殊场景下有着独特的用途与约定。深入理解下划线的各种…...

Vue3项目开发:状态管理实践指南

# Vue3项目开发&#xff1a;状态管理实践指南 一、引言 背景介绍 在Vue项目中&#xff0c;状态管理是一个非常重要的话题。合理的状态管理能够帮助我们更好地组织和管理数据&#xff0c;提升项目的可维护性和可扩展性。本文将深入探讨Vue3项目中状态管理的最佳实践&#xff0c;…...

JVM-JAVA编译到执行全过程

源码文件&#xff08;.java&#xff09;到代码执行的全过程&#xff1a; 该过程主要分为四个阶段&#xff0c;“编译-》加载-》解释-》执行”。 在编译阶段需要将源码文件&#xff08;.java&#xff09;通过语法分析、语义分析、注解处理后得到class文件&#xff1b; 在加载…...

数据结构-------栈

顺序栈&#xff1a; 一、数据结构定义 数据元素 DATATYPE typedef struct person {char name[32];char sex;int age;int score; } DATATYPE;顺序栈结构 SeqStack typedef struct list {DATATYPE *head; // 栈空间首地址int tlen; // 栈总容量&#xff08;total leng…...

机器学习概要

文章目录 一、什么是机器学习 二、机器学习的种类 1. 有监督学习 2. 无监督学习 3.强化学习 三、机器学习的应用 四、机器学习的步骤 1. 数据的重要性 2. 数据和学习的种类 3. 可视化 一、什么是机器学习 机器学习指的是计算机根据给定的问题、课题或环境进行学习&a…...

python:music21 与 AI 结合应用探讨

Python 的 music21 库与人工智能&#xff08;AI&#xff09;技术结合应用具有广泛的可能性&#xff0c;尤其是在音乐生成、分析和风格模拟等领域。以下是具体的结合方向与示例&#xff1a; 1. 音乐生成与 AI AI 模型驱动音乐生成&#xff1a; 使用深度学习模型&#xff08;如 …...

【LangChain入门 2 Model组件】开始!LLM Models简单对话

文章目录 一、使用langchain_ollama二、采用DeepSeek的API三、Model 介绍3.1 OllamaLLM 预训练模型3.2 ChatOllama 聊天预训练模型3.3 OllamaEmbeddings 实现一个helloworld&#xff0c;跑通一个简单的对话。 后面章节会正式介绍LangChain的各个功能。 后台llm的端口可以任意选…...

7种寻址方式

1. 立即寻址 立即寻址也叫立即数寻址&#xff0c;操作数本身就在指令中给出&#xff0c;只要取出指令也就取到了操作数&#xff0c;这个操作数被称为立即数。立即数要求以 “#” 为前缀。 #0x1100&#xff1a;表示十六进制数#0b1100&#xff1a;表示二进制数#0d1100&#xff…...

C语言中,#define和typedef 定义int* 一个容易混淆的点

前言 首先来看一个代码&#xff1a; #include <stdio.h> #include <string.h>#define int_ptr int *int main() {int c 100;int_ptr a , b; // 等效于int * a,b; 那么b就是int类型&#xff0c;不是int*类型a &c;b &c; //报错return 0; } 原意&#x…...

C++20 中线程管理与取消机制的深度剖析

文章目录 std::jthread&#xff1a;更智能的线程管理背景与优势构造函数与 std::stop_token 的集成 std::stop_token、std::stop_source 和 std::stop_callback&#xff1a;灵活的取消机制std::stop_token&#xff1a;取消请求的指示器std::stop_source&#xff1a;取消请求的发…...

Vue3 核心特性解析:Suspense 与 Teleport 原理深度剖析

Vue3 核心特性解析&#xff1a;Suspense 与 Teleport 原理深度剖析 一、Teleport&#xff1a;突破组件层级的时空传送 1.1 实现原理图解 #mermaid-svg-75dTmiektg1XNS13 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-s…...

FPGA——实现LED流水灯

文章目录 一、Quartusll_18.1和VS Code软件的关联二、DE2-115的时钟电路三、流水灯的分层次设计四、总结 一、Quartusll_18.1和VS Code软件的关联 1.先打开Quartus II 软件&#xff0c;然后选择菜单栏“Tools”下的“Options…”。 2.点击“Options…”&#xff0c;在弹出的对…...

Excel 小黑第12套

对应大猫13 涉及金额修改 -数字组 -修改会计专用 VLOOKUP函数使用&#xff08;查找目标&#xff0c;查找范围&#xff08;F4 绝对引用&#xff09;&#xff0c;返回值的所在列数&#xff0c;精确查找或模糊查找&#xff09;双击填充柄就会显示所有值 这个逗号要中文的不能英…...

6、说一下索引失效的场景?【中高频】

索引失效意味着 查询操作 不能利用索引进行数据检索&#xff0c;而是使用 全表扫描&#xff08;也就是 数据库需要从磁盘上读取表的所有数据行&#xff09;&#xff0c;从而导致性能下降&#xff0c;下面一些场景会发生索引失效 对索引使用左或者左右模糊匹配&#xff08;where…...

Noe.js 原生 http 模块 vs Express 框架对比

Noe.js 原生 http 模块 vs Express 框架对比 Noe.js 原生 http 模块 vs Express 框架对比 以下从多个维度对比两种方法&#xff0c;并提供详细示例&#xff0c;帮助初学者理解差异。 1. 基础架构对比 特性原生 http 模块Express 框架核心依赖Node.js 内置模块 (require(htt…...

滚动元素的新api

点击的时候需要双重视图滚动 itemClick(id) {// 滚动到对应位置this.$nextTick(() > {// 找到对应 id 在 initList2 中的索引const index this.initList2.findIndex((item) > item.id Number(id));if (index ! -1) {// 获取所有菜单项const menuItems document.queryS…...

多机调度问题(C语言)

代码如下&#xff1a; #include<stdio.h> #include<stdlib.h>int compare(void* a, void* b)//比较函数&#xff0c;用于qsort按处理时间从大到小排序 {return *(int*)a - *(int*)b; }int LPT(int jobs[], int n, int m)//多机调度问题的LPT算法 {qsort(jobs, n, …...

JS做贪吃蛇小游戏(源码)

一、HTML代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><link rel…...

烽火HG680-KB_海思HI3798MV310_安卓9.0_U盘强刷固件包及注意点说明

之前发布过这个固件包&#xff0c;关于烽火HG680-KA&#xff0f;HG680-KB_海思HI3798MV310_安卓9.0_U盘强刷固件包详细说明一下&#xff0c;汇总总结一些常遇到的情况&#xff0c;这次固件会分开发布&#xff0c;以免混淆。 上一个帖子地址&#xff1a;烽火HG680-KA&#xff0…...

Java数据结构相关知识

文章目录 1. 自动装箱和自动拆箱2. Object的equals方法3. Comparable和Comparator接口 1. 自动装箱和自动拆箱 自动装箱&#xff1a;将基本数据类型自动转换为对应的包装类。自动拆箱&#xff1a;将包装类自动转换为对应的基本数据类型。 显示装箱 int primitiveInt 10; //…...

996引擎 - 红点系统

996引擎 - 红点系统 总结NPC 红点(TXT红点)Lua 红点1. Red_Point.lua2. UI_Ex.lua参考资料以下内容是在三端 lua 环境下测试的 总结 红点系统分几个部分组成。 M2中设置变量推送。 配置红点表。 Envir\Data\cfg_redpoint.xls 2.1. UI元素中找到ID填写 ids 列。 主界面挂载…...

7种数据结构

7种数据结构 顺序表sqlite.hseqlite.c 单链表linklist.clinklist.h 双链表doulinklist.cdoulinklist.h 链式栈linkstack.clinkstack.h 队列SeqQueue.cSeqQueue.h 树tree.c 哈希表hash.c 顺序表 sqlite.h #ifndef __SEQLIST_H__ #define __SEQLIST_H__ typedef struct person…...

Redis的消息队列是怎么实现的

Redis 本身并不是一个专门的消息队列系统,但它的 List、Pub/Sub 和 Stream 数据结构可以用来实现消息队列的功能。以下是 Redis 实现消息队列的几种常见方式: 1. 基于 List 实现消息队列 Redis 的 List 是一个双向链表,支持在头部和尾部进行高效的插入和删除操作,非常适合…...

3.17BUUCTF练习day1

BUUCTF练习day1 [极客大挑战 2019]EasySQL1&#xff08;字符型&#xff0c;账号密码型&#xff0c;get型&#xff09; 判断闭合方式 在用户名输入1‘&#xff0c;此时密码先输入任何数字时&#xff0c;出现语法错误 说明闭合方式为单引号闭合&#xff0c;在判断完闭合方式后…...

【贪心算法】柠檬水找零

1.题目解析 860. 柠檬水找零 - 力扣&#xff08;LeetCode&#xff09; 2.讲解算法原理 分情况讨论 5---》直接收下 10---》找五元&#xff0c;收下 20----》105△ ----》555 由于5元更有用&#xff0c;则尽可能保留5元 3.代码 class Solution {public boolean lemonadeCh…...

黑马跟学.苍穹外卖.Day08

黑马跟学.苍穹外卖.Day08 苍穹外卖-day8课程内容1. 工作台1.1 需求分析和设计1.1.1 产品原型1.1.2 接口设计 1.2 代码导入1.2.1 Controller层1.2.2 Service层接口1.2.3 Service层实现类1.2.4 Mapper层 1.3 功能测试1.3.1 接口文档测试1.3.2 前后端联调测试 1.4 代码提交 2. Ap…...

ABAP语言的动态编程(4) - 综合案例:管理费用明细表

本篇来实现一个综合案例&#xff1a;管理费用明细表。报表在实际项目中&#xff0c;也有一定的参考意义&#xff0c;一方面展示类似的报表&#xff0c;比如管理费用、研发费用等费用的明细&#xff0c;使用业务比较习惯的展示格式&#xff1b;另一方面正好综合运用前面学习的动…...