前些天帮朋友在一台全新的 Windows 11 笔记本上配 C 语言开发环境,又碰到了那套绕不开的经典组合:GCC 编译器、Visual Studio Code、Dev-C++。说实话,这三样东西单个装都不难,但搭配在一起用的时候,坑全藏在细节里——环境变量配了却不生效、VS Code 能写代码但没法一键编译、Dev-C++ 在老系统上习以为常的功能在 Win11 上各种小毛病。这篇文章就把我从零到一踩过的路完整复述一遍,从下载哪个 GCC 发行版、环境变量怎么填、VS Code 的 tasks.json 和 launch.json 怎么写,到 Dev-C++ 的汉化和编译器替换,全都有。适合刚接触 C/C++ 的学生、准备比赛或者做课程设计的同学,也适合想把手头环境理清楚的上班族。
1. 装之前先想明白:三件套各自的角色
1.1 不是"三选一",而是"分工不同"
很多新手上来就问:"GCC、VS Code、Dev-C++ 我到底该装哪个?"这个问题本身就问错了。这三个东西压根不是同一类。
GCC 是编译器,负责把 C/C++ 源码变成可执行文件。Windows 本身不自带 GCC,系统预装的是 MSVC(Visual Studio 的那套编译器),如果你想在命令行里敲 gcc 命令,就必须自己装一份移植版,最常见的就是 MinGW-w64 系列。
Visual Studio Code 是代码编辑器,负责让你写代码的时候有语法高亮、自动补全、代码跳转这些舒服的体验。它本身不含编译器,只是把你安装的外部编译器"调用"起来干活。
Dev-C++ 则是集成开发环境(IDE),它把编辑器、编译器、调试器打包在一起,开箱即用,当年学校里教 C 语言用的就是它。
所以正确的关系是这样的:GCC 是发动机,VS Code 是驾驶舱,Dev-C++ 是那种驾校教练车——什么都集成好了,但比较老旧。三者可以共存,而且在实际工作中,VS Code 和 Dev-C++ 共用同一个 GCC 是很常见的操作。
1.2 我的推荐组合
经过这些年折腾,我现在的固定配置是这样的:
| 工具 | 用途 | 优先级 |
|---|---|---|
| MinGW-w64(GCC) | 核心编译器,命令行编译、VS Code 调用 | 必装 |
| Visual Studio Code | 日常写代码的主力编辑器 | 强烈推荐 |
| Dev-C++ 5.11 | 课程设计、比赛环境、给新手演示 | 可选但建议留 |
在 Windows 11 上,我的安装顺序是先装 GCC,再装 VS Code,最后装 Dev-C++。顺序很重要,因为 VS Code 配置时需要指定 GCC 的路径,Dev-C++ 也可以反过来"借用"系统里新装的 GCC 来替换掉它自带的老年版。
2. GCC 安装全流程:别在 MinGW-w64 上选错版本
2.1 下载哪个发行版
MinGW-w64 是个大项目,但官方并不直接提供傻瓜式安装包,社区里衍生出了好几个好用的发行版。我在 Win11 上实测过下面这几个,结论很明确。
第一个是 WinLibs,这个包自带 GCC、G++、GDB、Make、MinGW-w64 全套工具,而且是绿色解压版,不用安装程序,解压就能用。第二个是 w64devkit,同样绿色免安装,体积更小,里面还额外带了一些 Linux 风格的命令行小工具。第三个是 MSYS2,它不是单纯的编译器包,而是一个迷你 Linux 环境,里面通过 pacman 包管理器装 GCC,适合以后想进一步折腾的人,但对新手来说概念有点多。
我自己最推荐 WinLibs。原因很简单:下载一个压缩包,解压到 C 盘根目录,配好环境变量,完事。没有任何安装向导,也没有注册表残留,卸载的时候删文件夹就行。
下载时注意选Win64版本,你的 Win11 几乎肯定是 64 位的,别下成 Win32。文件名一般长这样:winlibs-x86_64-posix-seh-gcc-13.1.0-mingw-w64ucrt-11.0.0-r1.zip,里面几个关键词解释一下:x86_64是 64 位架构,posix代表线程模型(比 win32 模型兼容性更好),seh是异常处理机制(比 dwarf 更稳定),ucrt是运行时库(新版推荐)。这些用默认推荐的就行,不用自己折腾。
2.2 解压与环境变量配置
解压的路径我强烈建议直接放在C:\mingw64或者C:\winlibs,总之路径里别有中文、别有空格。我之前见过有人放在C:\Program Files\mingw64,路径中的空格在某些老式 Makefile 里会出幺蛾子,犯不着给自己埋雷。
配环境变量的步骤,我直接给你能照抄的版本:
- 按
Win + S搜索"编辑系统环境变量",打开系统属性的高级选项卡。 - 点击右下角"环境变量"按钮。
- 在"系统变量"列表中找到
Path,双击打开编辑窗口。 - 点击"新建",填入你的 MinGW-w64 里
bin文件夹的完整路径,比如C:\winlibs\mingw64\bin。 - 一路点"确定"保存退出。
提示:记得改的是"系统变量"里的 Path,不是"用户变量"里的。虽然改用户变量也能用,但系统变量对所有账号生效,将来你用其他账号登录或者某些 IDE 以管理员权限启动时,不会找不到 gcc。
配好后,必须关掉所有已经打开的终端窗口,重新开一个新的。这一步真的很多人栽过。环境变量的读取是窗口打开时快照式的,不重开终端,你敲gcc一定提示"不是内部或外部命令"。
新开终端后,依次验证三样东西:
gcc --version g++ --version gdb --versiongcc是 C 编译器,g++是 C++ 编译器,gdb是调试器,后面 VS Code 的调试功能要依赖它。三行命令都有版本信息输出,就说明 GCC 全家桶已经就位了。
2.3 顺手验证一次完整编译
终端里随便建个目录,写一个 helloworld 测试下编译链路:
mkdir test && cd test notepad main.c在记事本里敲上:
#include <stdio.h> int main() { printf("Hello from Windows 11 GCC\n"); return 0; }保存后执行:
gcc main.c -o main.exe ./main.exe看到输出就说明编译器工作正常。这里有个小细节:gcc main.c默认生成a.exe,用-o main.exe可以指定输出文件名,-o就是 output 的意思。命令行编译以后你会经常用到这个参数。
3. Visual Studio Code 配置实战:从编辑器到"真 IDE"
3.1 安装与扩展准备
VS Code 的下载没什么好纠结的,直接去官网,下 Windows x64 的 Stable 版本。安装时有两个选择值得留意:一个是"系统安装包"还是"用户安装包",建议选系统安装包,右键菜单的"用 Code 打开"这些集成功能更完整;另一个是安装向导里"添加到 PATH"和"添加到右键菜单"的选项记得全部打勾,不然后面用起来总觉得少点什么。
装完之后第一件事不是写代码,而是装扩展。我在 Win11 上从头配置,基本就装这几样:
- C/C++(Microsoft 官方出品,作者叫 Microsoft):语法高亮、智能提示、代码跳转、调试支持全靠它,必装。
- C/C++ Extension Pack:这是官方把 C/C++、CMake、代码格式化等一堆扩展打包在一起,新手直接装这一个更省事。
- Chinese (Simplified) Language Pack:官方中文汉化包,装完在右下角提示重启,重启后整个界面变成中文。英语没问题的可以不装,但如果你想省点心,建议装。
注意:VS Code 的扩展装完一般立即生效,但像语言包这种需要重启窗口的,它会弹提示,照着点就行。
装 C/C++ 扩展时有个容易踩的坑:扩展商店里搜 "C/C++" 会出来一堆同名或者名字很像的扩展,认准发布者是 Microsoft 的那个,其他第三方的一律不考虑。扩展这东西还是官方的稳,第三方的小众扩展有时候会注入奇怪的行为,没必要冒险。
3.2 创建工作区与源代码
打开 VS Code,用"文件"→"打开文件夹"创建一个专门放代码的文件夹,比如D:\Code。然后在里面新建一个hello.cpp,写上:
#include <iostream> using namespace std; int main() { cout << "Hello VS Code" << endl; return 0; }这时候 VS Code 会聪明地检测到这是 C++ 文件,然后在右下角弹一个提示:"检测到 C/C++ 扩展,是否安装推荐的编译器?"因为我们已经手动装好了 GCC,这里忽略它就行。这就是为什么我强调要先装 GCC 再装 VS Code——顺序反了的话,VS Code 会引导你去装它自己的一套工具链,反而绕了远路。
3.3 配置一键编译:tasks.json
光能写代码当然不够,新手最困惑的就是"我按下什么键才能编译运行"。VS Code 的编译动作叫"任务"(Task),配置文件是.vscode/tasks.json。
在 VS Code 里按Ctrl + Shift + P打开命令面板,输入 "Tasks: Configure Default Build Task",选择"使用模板创建 tasks.json",再选"Others"。然后把文件内容替换成下面这个:
{ "version": "2.0.0", "tasks": [ { "label": "C/C++ Build", "type": "shell", "command": "g++", "args": [ "-g", "${file}", "-o", "${fileDirname}/${fileBasenameNoExtension}.exe" ], "group": { "kind": "build", "isDefault": true }, "problemMatcher": ["$gcc"] } ] }逐个解释一下这些配置项,因为它们不是摆设,将来你要改任何编译选项都得动这里。
label是任务名字,随便起,显示在终端的任务列表里。command是你要执行的命令,这里填g++。args是传给 g++ 的参数数组,-g表示生成调试信息(这样断点才能生效),${file}是 VS Code 内置变量,代表当前打开文件的完整路径,-o指定输出文件名,${fileDirname}/${fileBasenameNoExtension}.exe意思是"当前文件所在目录/当前文件名去掉后缀.exe"。group里的"isDefault": true表示把这个任务设为默认编译任务,这样你按Ctrl + Shift + B就会直接执行它。problemMatcher是告诉 VS Code 怎么解析 GCC 输出的错误信息,这样编译报错时问题面板里能直接显示错误行列。
配置好之后,打开hello.cpp,按Ctrl + Shift + B,终端里应该自动执行 g++ 编译命令。如果一切正常,会在同目录下生成hello.exe。在集成终端里输入.\hello.exe就能看到运行结果。
注意:VS Code 的集成终端默认是 PowerShell,运行程序时要敲
.\hello.exe而不是hello.exe。点开头是告诉 PowerShell "执行当前目录下的文件",直接敲名字会被当成某个命令名,这是 PowerShell 的安全机制,不是报错。
3.4 配置 F5 调读:launch.json
能编译了,接下来是调试。按下F5,如果你的.vscode文件夹里还没有launch.json,VS Code 会弹出调试环境选择,选 "C++ (GDB/LLDB)"。然后把内容替换成下面这份,这是我在 Win11 上实测能用的最小配置:
{ "version": "0.2.0", "configurations": [ { "name": "C/C++ Debug", "type": "cppdbg", "request": "launch", "program": "${fileDirname}/${fileBasenameNoExtension}.exe", "args": [], "stopAtEntry": false, "cwd": "${fileDirname}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "C:/winlibs/mingw64/bin/gdb.exe", "setupCommands": [ { "description": "Enable pretty printing", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "preLaunchTask": "C/C++ Build" } ] }这里最关键的是miDebuggerPath,必须指向你机器上 gdb.exe 的真实路径。如果你用的不是 WinLibs,记得改成你自己的 MinGW-w64 路径。program是你要调试的可执行文件,${fileDirname}这些变量和 tasks.json 里含义一致。preLaunchTask写的是 tasks.json 里那个label,它保证每次按 F5 前先自动编译一遍,改代码后不用手动切来切去。
externalConsole我特意设成false,这样程序运行输出显示在 VS Code 的集成终端里。如果设成true,会弹出一个旧式的黑窗口,在 Win11 上看着特别穿越,而且那个窗口的中文乱码问题更难收拾。
3.5 顺便说一嘴智能提示的配置
写完上面两个文件,还有一个文件叫c_cpp_properties.json,一般情况下 VS Code 会自动生成并智能填充,但如果你想让代码补全更准确、不出现那种"红色波浪线但明明能编译"的尴尬,最好手动指定一下编译器路径。
按Ctrl + Shift + P,输入 "C/C++: Edit Configurations (JSON)",打开后确认compilerPath指向你的 g++:
{ "configurations": [ { "name": "Win32", "includePath": ["${workspaceFolder}/**"], "defines": ["_DEBUG", "UNICODE", "_UNICODE"], "compilerPath": "C:/winlibs/mingw64/bin/g++", "cStandard": "c17", "cppStandard": "c++17", "intelliSenseMode": "windows-gcc-x64" } ], "version": 4 }intelliSenseMode写成windows-gcc-x64,告诉智能提示引擎用的是 MinGW-w64 而不是 MSVC。我看到很多人抱怨 VS Code 对printf之类函数标红,几本都是这个配置没配对,VS Code 默认以为是 MSVC 环境,头文件路径对不上。
4. Dev-C++ 安装设置与使用定位
4.1 为什么我还会留着 Dev-C++
可能有人觉得:"都 2025 年了,谁还用 Dev-C++?"说实话,日常开发我确实不用它,但我会在两种情况下打开它,一是给完全没接触过编辑器概念的新手演示,因为它界面极简,新建文件点编译点运行,三步走完,完全没有 VS Code 那套"任务""配置"的概念负担;二是有时候参加校内比赛或者课程设计,机房环境固定是 Dev-C++,提前用它保证代码风格兼容不会有任何意外。
而且 Dev-C++ 本身自带 MinGW GCC,等于你有了一个"独立后备编译器"。即使系统里的 GCC 被折腾坏了,Dev-C++ 还能正常编译,这就是"备胎"的价值。
4.2 下载与安装
Dev-C++ 目前大家公认的稳定版本是 Orwell Dev-C++ 5.11,这是 2015 年发布的最后一版,之后原作者就没再更新。国内网上搜到的很多"中文版""增强版""绿色版",本质上都是基于这一版修改的。我自己用原版英文装的,装完再去官网下 Language Pack 或者用扩展里的汉化包,更放心一点。
安装过程基本就是一路 Next。唯一需要注意的是,安装快结束时有一步会让你选择"选择关联文件类型"和"添加到右键菜单",建议全选。还有一个复选框问是否导入之前的 Dev-C++ 配置,第一次装选否就行。
装完首次启动会弹出一个询问"使用哪种语言"的对话框,选择"简体中文"即可。如果你的安装包是英文版没这个提示,也可以通过菜单Tools→Environment Options→Language选择 Chinese。
4.3 让 Dev-C++ 用上新的 GCC
Dev-C++ 5.11 自带的编译器是 GCC 4.9.2,已经很老了。它能不能兼容 Win11?能。但如果你想让它用你新装的 GCC,也是可以的,而且这个过程正好能让新手理解 IDE 和编译器之间的"解耦"关系。
打开 Dev-C++,菜单栏工具→编译器选项,在弹出的窗口里:
- 选择"编译器"标签页,点击"编译器的安装目录"右侧的"自动侦测"按钮,旁边会有一个文件夹图标可以手动浏览。
- 如果自动侦测不到,会给出当前的编译器路径,手动改成
C:\winlibs\mingw64\bin。 - 在"程序"标签页里,确保
gcc.exe、g++.exe、gdb.exe这些项都指向新路径下的对应文件。 - 确定后,在同一个窗口的"编译器"标签页里检查
--version,确认显示的版本是新的。
改完之后编译一个程序试试,如果报"找不到 stdio.h"之类的错误,多半是 include 头文件路径没有更新。在编译器选项里找到"目录"标签页,把C:\winlibs\mingw64\include、C:\winlibs\mingw64\include\c++\13.1.0这类路径添加到 C/C++ 头文件搜索目录里。
4.4 新手在 Dev-C++ 里常干的三件事
Dev-C++ 的日常操作比 VS Code 直观得多,我直接列出来:
- 新建源码文件:
文件→新建→源代码,快捷键Ctrl + N。 - 编译运行:
运行→编译运行,快捷键F11,或者直接点工具栏那个"编译并运行"的图标。 - 调试:先按
F8设置断点,再运行→调试,然后按F5单步执行,F6进入函数。
这三个操作覆盖了绝大多数入门场景。很多学校上机考试是用 Dev-C++ 的,提前把这三个快捷键练熟,考试时能省不少时间。
5. 常见问题排查与避坑实录
5.1 环境变量失效与版本冲突
这个问题我从热搜词里看到问的人特别多:"gcc 升级后为啥还是旧版本""怎么切换 gcc 版本为 gcc-12"。在 Windows 上有两种常见情况。
第一种是装了多个 GCC,环境变量 PATH 里前面的把后面的"顶掉"了。Windows 系统搜索命令时按 PATH 列表的先后顺序查找,找到第一个 gcc.exe 就用第一个,后面的根本没机会。解决办法就是打开环境变量编辑器,把你想用的那个 MinGW-w64 的 bin 路径往上移到最前面,用"上移"按钮调顺序。
第二种是新版本已经装上,但终端显示的仍是旧版本。这通常是因为命令提示符/PowerShell 窗口是在修改 PATH 之前打开的,命令行工具只在启动时读取一次环境变量,不会实时刷新。关掉终端重开,或者直接重启电脑,问题就能解决。在 Linux 上有update-alternatives命令可以管理多版本切换,Windows 上没有现成的对应命令,最靠谱的办法就是改 PATH 顺序。
还有个小细节:当你敲gcc -v时输出里带Configured with: --host=... --build=...这种信息,那是构建时的元信息,不代表当前 GCC 版本。看版本直接看开头gcc version x.x.x那一行就行,别让那串长文本干扰判断。
5.2 中文乱码问题
在 Win11 上写 C/C++,中文乱码可以说是我见过的本主题下最高频的问题了。原因说白了就是编码不统一:源码文件保存的是 UTF-8,而 Windows 老旧的终端默认用 GBK/936 代码页显示字符,两者对不上,自然乱码。
我实测有效的解决方案有以下几个,按推荐程度排序:
- 在源码最开头加一行
system("chcp 65001");,强制把命令行的代码页切到 UTF-8。但这治标不治本,而且如果输出内容本身在程序运行后才打印,这招才有效。 - 在 main 函数开头用宽字符输出,也就是把
printf换成wprintf,配合setlocale(LC_ALL, "zh_CN.UTF-8");。这在 Windows 上有点麻烦,还牵扯到宽字符在控制台模式下的显示,新手建议先跳过。 - 最简单粗暴的:用 VS Code 的时候,在
tasks.json的 args 里加一个编译参数-fexec-charset=GBK,意思是让 GCC 在生成可执行文件时把字符串常量编码成 GBK。这样源码随便你怎么存 UTF-8,最终 exe 输出的字符串在 GBK 终端上显示就正常了。加完记得重新编译,只改配置不重编是没有效果的。 - 买一劳永逸的方案:给 Windows 开 Beta 版 UTF-8 选项。在控制面板 → 时钟和区域 → 区域 → 管理语言设置 → 更改系统区域设置 → 勾选"Beta:使用 Unicode UTF-8 提供全球语言支持"。这个开完之后系统级用 UTF-8 编码,但副作用是某些老软件界面会乱码,鱼和熊掌不可兼得。
5.3 杀毒软件、SmartScreen 和 Win11 的兼容性琐碎问题
从资源管理器下载的 MinGW-w64 压缩包,解压后第一次运行 gcc.exe 时,Windows Defender 的 SmartScreen 偶尔会弹一个"Windows 已保护你的电脑"的蓝色提示。这时候点"更多信息"→"仍要运行"就行。这是因为 gcc.exe 没有数字签名,不代表真有病毒。如果你介意,把 MinGW 目录加入 Defender 的排除项也可以,代价是手动操作一番。
Dev-C++ 在 Win11 上还有两个常见毛病,一个是在高分屏(125%、150% 缩放)下界面发虚、字体模糊。解决办法:右键 Dev-C++ 快捷方式 → 属性 → 兼容性 → 更改高 DPI 设置 → 勾选"替代高 DPI 缩放行为",缩放执行选"系统"或"系统增强"。另一个是菜单栏字体太小,可以在"工具"→"编辑器选项"→"显示"里调字号。
VS Code 方面,如果你发现右键菜单里没有"用 Code 打开",多半是安装时没勾选相关选项,或者安装包是用户版而非系统版。最简单的方法是重新运行安装程序,在"选择附加任务"页面把"添加到文件夹上下文菜单"和"添加到文件上下文菜单"打勾,等安装完成就会补上。
5.4 关于"Windows 11 内置 Linux"与 GCC 的一个提醒
现在 Win11 可以通过 WSL 直接装一个真正的 Linux 环境,里面用 apt 装 GCC 非常方便,命令是sudo apt install gcc g++ gdb make。这条路的优势是环境更接近服务器、比赛的评测机,代码跑起来基本零差异;劣势是文件系统、路径概念和 IDE 集成方式和 Windows 原生有差异,对纯粹想应付学校课程的新手来说学习成本反而更高。
我的建议是:先按本文的方案把 Windows 原生的 GCC 搞定,这已经能满足 90% 的日常需求。等将来你开始接触 Linux 服务器部署、交叉编译这些进阶话题时,再来研究 WSL 不迟。别在入门阶段给自己叠加太多认知负担。
5.5 常见问题排查速查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 敲 gcc 提示不是内部命令 | PATH 没配置或终端未重开 | 检查 Path 设置,新开终端窗口 |
| gcc 版本是旧的 | PATH 里有多个 GCC,顺序不对 | 调整 PATH,把新版本路径上移 |
| VS Code 报错 g++ 不是内部命令 | VS Code 启动时没有继承 PATH | 完全关闭 VS Code 重新打开 |
| 编译报错 cannot find iostream | 编译器没找到标准库路径 | 重装/换发行版,或检查 c_cpp_properties.json |
| 编译好的 exe 双击黑框一闪而逝 | 程序正常结束,控制台关闭 | 命令行运行 exe,或在代码末加 getchar() |
| Dev-C++ 编译报 ld returned 1 exit status | 通常是当前 exe 还在运行被占用 | 关掉正在运行的程序窗口,再重新编译 |
| F5 调试提示无法找到 gdb | launch.json 的路径不对 | 修改 miDebuggerPath 为真实 gdb 路径 |
6. 最后说点大实话
整套环境配完,我实际用下来的体会是:日常写作业、刷算法题,主力是 VS Code,因为它的补全和调试体验在免费工具里确实顶;系统里那个 GCC 是发动机,几乎天天被调用;Dev-C++ 则像个老伙计,平时躺在那不大用,但遇到比赛、应急、给别人演示的时候,它那简单粗暴的界面反而最稳。
最后再分享一个小技巧:如果你嫌每次在 VS Code 里按Ctrl + Shift + B编译、再手动去终端跑 exe 麻烦,可以在 tasks.json 里把编译命令改成一条 cmd 链,比如把command换成cmd,args改成["/c", "g++ -g ${file} -o ${fileDirname}/${fileBasenameNoExtension}.exe && ${fileDirname}/${fileBasenameNoExtension}.exe"]。这样按一次按键,编译加运行一步到位。&&是 cmd 里的"上一条执行成功就执行下一条"的连接符,理解了这个,你就开始学会定制自己的工具链了。这种小改动能省下很多重复操作,也是把这套环境真正变成"自己的"的第一步。