不要再只会用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_64ARM64-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
如果改完还是有红波浪线怎么办
-
执行命令面板里的
C/C++: Reset IntelliSense Database -
执行
C/C++: Log Diagnostics检查里面的
Compiler Path是否真的是:textC:/msys64/ucrt64/bin/g++.exe -
关闭当前 cpp 文件再重新打开
-
或者直接重启 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 里稳定写算法题,核心只需要三样东西:
- VSCode 插件
C/C++ - 一个真正可用的编译器
- 让 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编译后生成Atest.cpp编译后生成test
这个是正常且不可避免的,因为 C++ 代码必须先编译成可执行程序。
第二类是 .dSYM,比如:
test.dSYMA.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编译、终端运行