C语言基础系列【3】VSCode使用

server/2025/2/6 19:16:17/

前面我们提到过VSCode有多么的好用,本文主要介绍如何使用VSCode编译运行C语言代码。

安装

首先去官网(https://code.visualstudio.com/)下载安装包,点击Download for Windows

获取安装包后,一路点击Next就可以。

配置VSCode

相关的配置详见:https://code.visualstudio.com/docs/cpp/config-msvc (直接看官方文档即可)

也可以参考这个文档:https://blog.csdn.net/lyb06/article/details/133305751

主要步骤如下

安装扩展

安装好VSCode后,打开后,搜索C/C++的扩展,然后安装:

安装MinGW-w64

通过 MSYS2 获取最新版本的 MinGW-w64,它提供了 GCC、MinGW-w64 以及其他有用工具和库的最新原生构建版本。为你提供编译代码、调试代码以及配置 IntelliSense 所需的工具。

要安装 MinGW-w64 工具链,可按照以下步骤操作:

  1. 你可以从 MSYS2 页面下载最新安装程序,或使用此直接链接下载安装程序。
  2. 运行安装程序并按照安装向导的步骤进行操作。请注意,MSYS2 需要 64 位 Windows 8.1 或更高版本。
  3. 在向导中,选择你希望的安装文件夹。记录下此目录,以备后续使用。最好直接使用推荐目录。完成后,确保选中“运行 MSYS2”,然后点击“完成”。这将为你打开一个 MSYS2 终端窗口。
  4. 在此终端中,通过运行以下命令安装 MinGW-w64 工具链:
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain
  1. 按下回车键接受 toolchain 组中的默认软件包数量。

  1. 当提示是否继续安装时,输入 Y
  2. 将 MinGW-w64 的 bin 文件夹路径添加到 Windows 的 PATH 环境变量中,具体步骤如下:
    1. 在 Windows 搜索栏中输入“设置”,打开 Windows 设置。
    2. 搜索“编辑账户的环境变量”。
    3. 在“用户变量”中,选择 Path 变量,然后点击“编辑”。
    4. 点击“新建”,并添加你在安装过程中记录的 MinGW-w64 目标文件夹路径。如果你使用了上述默认设置,则路径为:C:\msys64\ucrt64\bin
    5. 点击“确定”,然后在“环境变量”窗口中再次点击“确定”,以更新 PATH 环境变量。 请注意,你需要重新打开任何控制台窗口,以便更新后的 PATH 环境变量生效。

检查MinGW是否已安装

要检查 MinGW-w64 工具是否正确安装并可用,请打开一个新的命令提示符窗口并输入以下命令:

gcc --version
g++ --version
gdb --version

你应该会看到显示已安装的 GCC、g++ 和 GDB 版本的输出信息。如果情况并非如此:

  1. 确保你的 PATH 变量条目与工具链安装位置的 MinGW-w64 二进制文件位置匹配。如果编译器在该 PATH 条目中不存在,请确保你按照前面的指示进行了操作。
  2. 如果 gcc 的输出正确,但 gdb 不正确,则你需要从 MinGW-w64 工具集中安装你缺少的软件包。
    1. 如果在编译时出现“The value of miDebuggerPath is invalid”的消息,其中一个原因是缺少 mingw-w64-gdb 软件包。

创建程序

创建项目

可以直接用VSCode打开某个文件夹,该文件夹将成为你的“工作区”。在弹出的工作区信任对话框中,选择“是,我信任作者”,因为这是你创建的文件夹。

然后你将在工作区的 .vscode 文件夹中看到三个文件:

  • tasks.json(构建指令)
{"tasks": [{"type": "cppbuild","label": "C/C++: g++.exe build active file","command": "C:\\msys64\\ucrt64\\bin\\g++.exe","args": ["-fdiagnostics-color=always","-g","${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"],"options": {"cwd": "${fileDirname}"},"problemMatcher": ["$gcc"],"group": {"kind": "build","isDefault": true},"detail": "Task generated by Debugger."}],"version": "2.0.0"
}
  • 详情:
    • command 设置指定了要运行的程序;在本例中,它是 g++
    • args 数组指定了传递给 g++ 的命令行参数。这些参数按照编译器期望的特定顺序列在该文件中。
    • 此任务告诉 g++ 使用活动文件(${file}),将其编译,并在当前目录(${fileDirname})中创建一个输出文件(-o 参数),文件名与活动文件相同,但带有 .exe 扩展名(${fileBasenameNoExtension}.exe)。对我们来说,这将生成 helloworld.exe
    • label 的值是你在任务列表中看到的内容;你可以随意命名它。
    • detail 的值是你在任务列表中看到的任务描述。强烈建议你更改此值,以便将其与其他类似任务区分开来。
    • problemMatcher 的值用于选择用于在编译器输出中查找错误和警告的输出解析器。
  • launch.json(调试器设置)
{"version": "0.2.0","configurations": [{"name": "g++.exe - Build and debug active file","type": "cppdbg","request": "launch","program": "${fileDirname}\\${fileBasenameNoExtension}.exe","args": [],"stopAtEntry": false,"cwd": "${fileDirname}","environment": [],"externalConsole": false,"MIMode": "gdb","miDebuggerPath": "gdb.exe","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}],"preLaunchTask": "C/C++: g++.exe build active file"}]
}

新建文件

点击新建文件按钮,新建个test.c文件:

编写代码

test.c文件中,编写简单的Hello World代码:

运行

直接点击图中按钮,运行即可:

你会看到有Hello,World的输出,然后你也会看到同级目录中出现了test.exe的可执行文件,这个可执行文件我们也可以直接运行,也会有同样的输出。

作者介绍

程序喵大人

  • 35- 资深C/C++/Rust/Android/iOS客户端开发
  • 10年大厂工作经验
  • 嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手
  • 《C++20高级编程》《C++23高级编程》等多本书籍著译者

C++训练营

专为校招、社招3年工作经验的同学打造的1V1 C++训练营,量身定制学习计划、每日代码review,简历优化,面试辅导,一条龙服务,已帮助多名学员获得offer!训练营介绍


http://www.ppmy.cn/server/165489.html

相关文章

精品PPT | 华为企业数据架构、应用架构及技术架构设计方法

这份PPT详细介绍了华为企业数据架构、应用架构及技术架构的设计方法。它涵盖了数据架构的五大原则,包括数据按对象管理、企业全局视角定义数据架构、遵从企业数据分类管理框架、概念实体结构化数字化以及数据服务化同源共享等,旨在确保数据在企业内的一致…

5.5.3 UML概述(一)事物

文章目录 UML构造块-事物 UML UML(Unified Modeling Language)统一建模语言由构造块、构造块放在一起的规则、语言的公共机制组成。构造块由事物、关系和图组成。事物是对代表性部分的抽象。事物由结构事物、行为事物、分组事物和注解事物组成。 构造块-事物 结构事物是UML中的…

JAVA 二维列表的基础操作与异常

在Java中创建二维 ArrayList(即嵌套列表)的方法有多种,下面我将详细介绍常用的几种方式,并分析它们的区别和适用场景。 1. 使用嵌套 ArrayList 创建二维列表 方法一:直接嵌套 ArrayList 这是最常用的方法&#xff0c…

15.<Spring Boot 日志>

本篇文章将记录我学习SpringBoot日志 1.日志文件的用途 2.SpringBoot日志文件的配置 3.用lombook依赖引入Slf4j注解,从而引入log对象。方便我们打印日志。 一、日志的作用 日志主要是为了发现问题、分析问题、定位问题。除此之外、日志还有许多其他的用途。 1.系统监…

JAVA进阶之线程

为神马有线程?这玩意儿在干嘛??? 回答这个问题,就先要知道一点点计算机的工作方式。 总所周知,计算机有五部分:输入输出、计算器、存储器、控制器。而在计算机内,CPU、内存、I/O之…

Spring理论知识(Ⅴ)——Spring Web模块

Spring的组成 Spring由20个核心依赖组成,这20个核心依赖可以分为6个核心模块 Spring Web模块简介 众所周知,Java目前最大的一个用途就是作为Web应用的服务端(Java Web) Spring又是JavaEE中使用最广泛的开发框架&#xff0…

【LLM】为何DeepSeek 弃用MST却采用Rejection采样

文章目录 拒绝采样 Rejection sampling🎯马尔可夫搜索树 🌳RFT和SFT1. RFT和SFT的区别2. 如何将RFT用于数学推理任务? Reference 在提升大语言模型(LLM)推理能力时,拒绝采样(Rejection Sampling…

文本分析NLP的常用工具和特点

1)非上下文感知型文本分析工具和特点 特性VADERTextBlob适合文本类型短文本、非正式语言(如评论、推文)中等长度、正式文本情感强度分析支持(正面、负面、中性)支持(极行、主观性)处理表情符号…