【写给新人】在 vscode 中配置适用于算法竞赛背景的 c/c++

不要再只会用dev c了(


用哪个os直接看哪个部分。(没有linux只有win和mac)


Windows 上在 VSCode 中配置 C/C++ 算法题环境

支持标准输入输出,尽量贴近 OJ / Codeforces 的使用习惯,不做复杂工程配置,也不依赖断点调试。

一、总述

如果只是想在 Windows 上用 VSCode 稳定写算法题,最推荐的路线是:

  • VSCode 插件:C/C++
  • 编译器:MSYS2 + MinGW-w64 GCC
  • 运行方式:终端标准输入输出,不走复杂调试流程

也就是说,这次不是直接去找各种来源不明的 MinGW 压缩包,而是通过 MSYS2 来安装和管理 GCC 工具链。这是比较现代、也更省事的一种做法。(直接下乱七八糟的MinGW真的很容易出各种奇怪的问题啊)

二、MSYS2 + GCC

1. MSYS2是什么

MSYS2 可以理解成 Windows 上的一套"类 Linux 开发环境 + 包管理器 + 工具链安装平台"。

它本身不是单纯一个编译器,而是一个用来安装、管理和更新开发工具的环境。对于配置 C/C++ 来说,它最大的作用是:可以比较方便地安装 MinGW-w64/GCC,而不需要手动下载、解压、配一堆杂乱路径。

对写算法题来说,可以直接把它理解为:

Windows 上安装 GCC 的推荐入口。

2. 确定机器架构

在安装工具链之前,要先确认自己 Windows 机器的架构。

打开:

设置 → 系统 → 关于 → 系统类型

如果看到的是:

  • x64-based PC,就选 x86_64
  • ARM64-based PC,就选 arm64

大多数普通 Intel / AMD 笔记本和台式机,基本都是 x86_64

3. 安装 MSYS2

先去 MSYS2 官网下载安装程序,选自己对应的机型架构。

安装完成后,默认目录通常是:

text 复制代码
C:\msys64

安装好后,不要急着用普通 cmd 或 PowerShell,而是先打开开始菜单里的:

text 复制代码
MSYS2 UCRT64

这里很关键。MSYS2 有不同环境,而这次用来配 VSCode 的是 UCRT64 环境。后面要使用的 GCC 工具链,也是在这个环境里安装的。

4. 更新 MSYS2 的数据库和组件

第一次打开 MSYS2 UCRT64 终端后,先执行:

bash 复制代码
pacman -Syu

这一步会更新包数据库和系统组件。

如果更新过程中提示你关闭终端重新打开,那就照做。重新打开 MSYS2 UCRT64 后,再执行一次:

bash 复制代码
pacman -Syu

直到更新完成为止。

5. 安装 GCC 工具链

更新完成后,安装工具链:

bash 复制代码
pacman -S --needed base-devel mingw-w64-ucrt-x86_64-toolchain

如果你的机器是 ARM64,则对应包名要换成 ARM 版本;但对大多数 x64 Windows 电脑来说,就是上面这一条。

执行之后,MSYS2 会列出一整组工具链组件,例如:

  • binutils
  • crt
  • gcc
  • gdb
  • headers
  • make
  • pkgconf
  • tools
  • winpthread 等

这一步直接接受默认的 all 即可,按回车安装全部,不需要手动精简。因为这本来就是一组完整工具链,自己删减反而容易漏依赖。

6. 检查 GCC 是否安装成功

装完后,在 MSYS2 UCRT64 终端里检查:

bash 复制代码
g++ --version
gcc --version
gdb --version

如果都能正常输出版本号,就说明 GCC 工具链已经装好了。

7. 把 GCC 加到 Windows 的 PATH

接下来要做的一步是,把 GCC 所在目录加入 Windows 的环境变量 Path

对于 UCRT64 环境,应该加入的是:

text 复制代码
C:\msys64\ucrt64\bin

加完之后,重新打开一个新的终端(cmd / PowerShell / VSCode 终端都可以),执行:

bash 复制代码
g++ --version
where g++

如果能正常看到版本号,并且 where g++ 输出的是:

text 复制代码
C:\msys64\ucrt64\bin\g++.exe

那就说明 Windows 已经能正确找到这套 GCC 了。

三、安装 VSCode 插件并测试

1. 安装插件

打开 VSCode,安装插件:

  • C/C++

这是微软官方的 C/C++ 扩展,负责语法高亮、代码补全、错误提示、跳转、IntelliSense 等功能。

2. 先手动测试一次编译

新建一个 test.cpp

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int main() {
    cout << "Hello, Windows + MSYS2 GCC!" << '\n';
    return 0;
}

(不过这个时候大概率会标红万能头,但是手动编译其实是能通过的。先不管,后面会改编译器路径。)

先在 VSCode 终端里手动测试编译:

bash 复制代码
g++ -std=gnu++17 test.cpp -o test.exe

然后运行:

bash 复制代码
.\test.exe

如果能正常输出:

text 复制代码
Hello, Windows + MSYS2 GCC!

说明 GCC 本身已经没问题。

3. 标准输入输出在哪里输入

算法题一般使用的是标准输入 / 标准输出,而不是文件读写。

所以输入的位置是:

VSCode 下方终端

也就是说,流程通常是:

先编译:

text 复制代码
Ctrl + Shift + B

再运行:

bash 复制代码
.\A.exe

程序如果在读入数据,就会停在那里等你输入。

这时直接在终端中输入样例即可,比如:

text 复制代码
.\A.exe
3
1 2 3

如果程序还在等待输入,但你已经输完了,可以根据程序逻辑继续输入,或者结束当前运行。

四、修改 IDE 配置

1. 修改 IntelliSense 编译器路径

我当时已经在终端里用 GCC 成功编译了代码,但 VSCode 里 #include <bits/stdc++.h> 还是有红色波浪线,提示:

  • 无法打开源文件 bits/stdc++.h
  • 请更新 includePath

后来排查才发现,问题不是 GCC 没装好,而是:

VSCode 实际编译器已经改成了 GCC,但 IntelliSense 还没有切到同一个编译器路径。

也就是说:

  • tasks.json 决定"实际怎么编译"
  • c_cpp_properties.json 决定"编辑器怎么理解你的代码"

法1:可以直接改 .vscode/c_cpp_properties.json

json 复制代码
{
  "configurations": [
    {
      "name": "Mac",
      "compilerPath": "/opt/homebrew/bin/g++-15",
      "cStandard": "c17",
      "cppStandard": "gnu++17",
      "intelliSenseMode": "macos-gcc-arm64",
      "includePath": [
        "${workspaceFolder}/**"
      ]
    }
  ],
  "version": 4
}

这里最关键的是这几项:

  • "compilerPath": "/opt/homebrew/bin/g++-15"
  • "cppStandard": "gnu++17"
  • "intelliSenseMode": "macos-gcc-arm64"

法2:在UI界面改
Ctrl + Shift + P 输入

复制代码
C/C++: Edit Configurations (UI)

打开后修改这几项:

  • Compiler path
    /opt/homebrew/bin/g++-15

  • IntelliSense mode
    macos-gcc-arm64

  • C++ standard
    gnu++17

如果改完还是有红波浪线怎么办

  1. 执行命令面板里的
    C/C++: Reset IntelliSense Database

  2. 执行
    C/C++: Log Diagnostics

    检查里面的 Compiler Path 是否真的是:

    text 复制代码
    C:/msys64/ucrt64/bin/g++.exe
  3. 关闭当前 cpp 文件再重新打开

  4. 或者直接重启 VSCode

通常这样就能让红波浪线消失。

2. 推荐的 tasks.json

如果只是写算法题,不调试,只想快速编译当前文件,那么 .vscode/tasks.json 可以写成下面这样:

json 复制代码
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build cpp",
      "type": "shell",
      "command": "C:/msys64/ucrt64/bin/g++.exe",
      "args": [
        "-std=gnu++17",
        "-O2",
        "-Wall",
        "${file}",
        "-o",
        "${fileDirname}\\${fileBasenameNoExtension}.exe"
      ],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "presentation": {
        "echo": true,
        "reveal": "always",
        "focus": false,
        "panel": "shared",
        "clear": true
      },
      "problemMatcher": [
        "$gcc"
      ]
    }
  ]
}

这份配置的作用是:

  • 使用 MSYS2 UCRT64 环境下的 g++.exe
  • 使用 gnu++17
  • 开启 -O2
  • 输出同名 .exe 文件

例如:

  • A.cpp -> A.exe

以后按:

text 复制代码
Ctrl + Shift + B

就会自动编译当前文件。


日常使用方式

全部配置完成后,日常写算法题的流程就很简单:

先写代码,例如 A.cpp

然后按:

text 复制代码
Ctrl + Shift + B

完成编译。

再在终端运行:

bash 复制代码
.\A.exe

接着直接在终端里输入样例数据。

总结

如果目标只是"在 Windows 上用 VSCode 写 C/C++ 算法题",最简洁、最稳的路线就是:

  • 安装 MSYS2
  • 使用 MSYS2 UCRT64 环境
  • 安装 mingw-w64-ucrt-x86_64-toolchain
  • C:\msys64\ucrt64\bin 加到 Windows 的 Path
  • 在 VSCode 中安装 C/C++
  • tasks.json 里把编译器改成 C:/msys64/ucrt64/bin/g++.exe
  • c_cpp_properties.json 里把 compilerPath 也改成 C:/msys64/ucrt64/bin/g++.exe
  • 不走 debug 流程,只用 Ctrl + Shift + B 编译、终端运行

Mac M 系列在 VSCode 中配置 C/C++ 算法题环境

配置这个环境的目标很明确:在 VSCode 里写 C/C++ 算法题,支持标准输入输出,尽量贴近 OJ/Codeforces 的使用习惯,不走复杂工程配置,也不依赖断点调试。

一、总述

如果只是想在 VSCode 里稳定写算法题,核心只需要三样东西:

  1. VSCode 插件 C/C++
  2. 一个真正可用的编译器
  3. 让 VSCode 的"实际编译器"和"编辑器分析器"保持一致

在 Mac 上,编译器有两种路线:

  • 用系统自带的 clang++
  • 用 Homebrew 安装 GNU GCC

如果只是普通标准 C++,clang++ 就能用;但如果平时写算法题习惯用 #include <bits/stdc++.h>,或者想更贴近 GNU 竞赛环境,那么更推荐 Homebrew GCC。

二、系统自带编译器 clang++

先安装或检查 Xcode Command Line Tools:

bash 复制代码
xcode-select --install

如果系统提示已经安装,说明这一层已经好了。

再检查一下 clang

bash 复制代码
clang --version

如果能看到版本信息,说明系统自带编译器可用。

三、安装 VSCode 插件并测试

1. 安装插件

打开 VSCode,安装插件:

  • C/C++

这个插件负责语法高亮、代码补全、报错提示、跳转等基础功能。

2. 第一次运行时应该怎么选

随便建一个 test.cpp 文件:

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    cout << "Hello, C++ on Mac!" << endl;
    return 0;
}

第一次在 VSCode 里运行时,通常会弹出配置选择。

如果你当时用的是系统自带编译器,应该选:

C/C++: clang++ 构建和调试活动文件

注意不要选 clang,因为:

  • clang 是 C 编译器
  • clang++ 是 C++ 编译器

不过这里其实还有一个更重要的经验:如果只是写算法题,不建议日常走"运行和调试"这套流程。

因为一旦走 debug,VSCode 往往会生成不少调试相关内容,比如:

  • 可执行文件 test
  • 调试信息目录 test.dSYM
  • Debug Console 里的大量 Loaded ...Symbols loaded

这些对写算法题意义不大,反而会显得很乱。

3. 为什么会生成一堆奇怪文件

这里要区分两类文件。

第一类是可执行文件,比如:

  • A.cpp 编译后生成 A
  • test.cpp 编译后生成 test

这个是正常且不可避免的,因为 C++ 代码必须先编译成可执行程序。

第二类是 .dSYM,比如:

  • test.dSYM
  • A.dSYM

这个不是必须的。后来排查发现,它出现的根本原因通常是编译参数里带了:

bash 复制代码
-g

-g 的作用是生成调试信息。在 macOS 上,只要你编译命令里有 -g,即使你不是在认真做断点调试,也可能生成 .dSYM

所以如果只是刷算法题,不需要调试信息,就需要在项目管理器中的 /.vscode/tasks.json/ 中的 "tasks"->"args" 里把 -g 去掉。

如果不用GNU风格,只用clang++ ,那么推荐的tasks.json 完整版:

json 复制代码
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build cpp",
      "type": "shell",
      "command": "/usr/bin/clang++",
      "args": [
        "-std=c++17",
        "-O2",
        "-Wall",
        "${file}",
        "-o",
        "${fileDirname}/${fileBasenameNoExtension}"
      ],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "presentation": {
        "echo": true,
        "reveal": "always",
        "focus": false,
        "panel": "shared",
        "clear": true
      },
      "problemMatcher": [
        "$gcc"
      ]
    }
  ]
}

4. 标准输入输出到底在哪里输入

算法题大多数不是文件读写,而是标准输入 / 标准输出。

这时候输入不是在代码里,也不是额外弹出来的窗口里,而是在 VSCode 下方终端 里。

典型流程如下。

先编译:

text 复制代码
Cmd + Shift + B

然后运行:

bash 复制代码
./A

程序如果在读入数据,就会停在那里等待输入。

这时直接在终端里输入测试数据即可,例如:

text 复制代码
./A
3
1 2 3

如果程序还在等待输入,但你已经输完了,可以按:

text 复制代码
Control + D

表示输入结束。

所以对于标准输入输出题目,最自然的方式就是:底部终端运行程序,然后直接在终端里打样例。

四、安装 Homebrew GCC

如果想使用 GNU 风格环境,可以安装 Homebrew GCC。如果不需要,那么其实以上这些步骤就够了。

先安装 Homebrew:

bash 复制代码
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

安装后配置环境变量:

bash 复制代码
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"

然后安装 GCC:

bash 复制代码
brew install gcc

安装完成后检查版本:

bash 复制代码
/opt/homebrew/bin/g++-15 --version
/opt/homebrew/bin/gcc-15 --version

如果能看到版本号,就说明 GCC 已经装好了。

在 Apple Silicon 机器上,Homebrew 默认装在:

bash 复制代码
/opt/homebrew

所以后面配置 VSCode 时,最好直接写绝对路径:

bash 复制代码
/opt/homebrew/bin/g++-15

而不要写成 /usr/bin/g++

五、修改 IDE 配置

1. 修改 IntelliSense 编译器路径

当你已经把 tasks.json 改成了用 Homebrew GCC 编译,终端里也能正常编译运行 bits/stdc++.h,但 VSCode 里还是出现红波浪线,提示:

  • 无法打开源文件 bits/stdc++.h
  • 请更新 includePath

这时候很容易误以为 GCC 还是没装好。其实不是。真正的问题是:

VSCode 的"实际编译器"改了,但 IntelliSense 还在按旧的 /usr/bin/g++ 或 clang 配置去分析代码。

也就是说:

  • tasks.json 决定的是"你按编译快捷键时真正调用谁"
  • c_cpp_properties.json / IntelliSense 设置决定的是"编辑器红波浪线、头文件识别、补全时参考谁"

这两套配置必须一致。

所以接下来我们就要把 VSCode 的编译器路径也切到 Homebrew GCC。

法1:可以直接改 .vscode/c_cpp_properties.json

json 复制代码
{
  "configurations": [
    {
      "name": "Mac",
      "compilerPath": "/opt/homebrew/bin/g++-15",
      "cStandard": "c17",
      "cppStandard": "gnu++17",
      "intelliSenseMode": "macos-gcc-arm64",
      "includePath": [
        "${workspaceFolder}/**"
      ]
    }
  ],
  "version": 4
}

这里最关键的是这几项:

  • "compilerPath": "/opt/homebrew/bin/g++-15"
  • "cppStandard": "gnu++17"
  • "intelliSenseMode": "macos-gcc-arm64"

法2:在UI界面改
Cmd + Shift + P 输入

复制代码
C/C++: Edit Configurations (UI)

打开后修改这几项:

  • Compiler path
    /opt/homebrew/bin/g++-15

  • IntelliSense mode
    macos-gcc-arm64

  • C++ standard
    gnu++17

重启一下vscode。

2. 推荐的 tasks.json

如果只是写算法题,不调试,只想按 Cmd + Shift + B 编译,那么 .vscode/tasks.json 可以写成:

json 复制代码
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "build cpp",
      "type": "shell",
      "command": "/opt/homebrew/bin/g++-15",
      "args": [
        "-std=gnu++17",
        "-O2",
        "-Wall",
        "${file}",
        "-o",
        "${fileDirname}/${fileBasenameNoExtension}"
      ],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "presentation": {
        "echo": true,
        "reveal": "always",
        "focus": false,
        "panel": "shared",
        "clear": true
      },
      "problemMatcher": [
        "$gcc"
      ]
    }
  ]
}

这份配置的特点是:

  • 使用 Homebrew GCC
  • 使用 gnu++17
  • 开启 -O2
  • 不加 -g
  • 输出文件和源文件同名

例如:

  • A.cpp -> A

日常使用方式

全部配置完成后,写算法题的流程其实非常简单:

先写代码,例如 A.cpp

然后按:

text 复制代码
Cmd + Shift + B

完成编译。

再在终端运行:

bash 复制代码
./A

接着直接在终端里输入样例数据。

这套方式最接近 OJ 的实际使用习惯,也比"运行和调试"更清爽。

总结

"在 Mac M 系列上用 VSCode 写 C/C++ 算法题"最简洁的方案:

  • 安装 Xcode Command Line Tools
  • 安装 VSCode 插件 C/C++
  • 安装 Homebrew GCC
  • tasks.json 里把编译器改成 /opt/homebrew/bin/g++-15
  • c_cpp_properties.json 里把 compilerPath 也改成 /opt/homebrew/bin/g++-15
  • 不走 debug 流程,只用 Cmd + Shift + B 编译、终端运行
相关推荐
Dfreedom.2 小时前
归一化技术全景指南
深度学习·算法·机器学习·归一化
TracyCoder1232 小时前
LeetCode Hot100(70/100)—— 322. 零钱兑换
算法·leetcode·职场和发展
2401_891482172 小时前
C++中的观察者模式
开发语言·c++·算法
沐雲小哥2 小时前
bevfomer算法嵌入的tricks
数码相机·算法
wangzy19822 小时前
一个高效稳定的多边形三角化算法(支持自交和孤岛检测)
算法·图形渲染
保持低旋律节奏2 小时前
第三讲一元函数微分学的概念
算法
CrystalShaw2 小时前
[AI codec]opus-1.6\dnn包含算法汇总和文件功能分类
人工智能·算法·dnn
南滑散修2 小时前
机器学习(三):SVM支持向量机算法
算法·机器学习·支持向量机
AMoon丶2 小时前
Golang--锁
linux·开发语言·数据结构·后端·算法·golang·mutex