资讯详情

Notepad++搭配MinGW:手把手搭建轻量C语言编译环境

📅 2026/9/16 3:29:55 | 华诺云谱 👁 阅读
Notepad++搭配MinGW:手把手搭建轻量C语言编译环境
1. 为什么还在用Notepad写C语言先聊点真实的说实话2024年还在推荐用Notepad写C语言听起来有点复古。你一定听过VS Code、CLion、Visual Studio这些功能更全的工具甚至有人直接说用记事本写C语言是自虐。但我在实际教学和日常开发中观察到一个现象很多刚接触C语言的朋友恰恰是栽在IDE的环境配置上。VS Code本身不算重但装插件、配tasks.json、调launch.json每一步都能劝退一大批人Visual Studio那个安装包动辄几个GB打开都费劲而Notepad轻巧、免安装、打开就是写代码配合MinGW或者TDM-GCC几分钟就能把写代码—编译—运行这个闭环跑通。对于刷OJ、做课后习题、学指针与内存管理这些基础阶段的场景它完全够用而且能帮你把注意力聚焦在C语言本身而不是编辑器花里胡哨的功能上。当然Notepad不是没有缺点。它的自动补全、错误提示、调试体验跟专业IDE差着量级。所以这篇文章不是让你放弃其他工具而是给你一条从零开始、最省心的路。如果你正卡在编辑器装好了却不会编译运行或者你只是想找一个轻量环境陪你把翁恺老师的练习题刷完这篇文章值得你花十分钟读完。2. 开工前的准备装一个能用的GCC编译器2.1 选MinGW还是TDM-GCC我的建议Notepad只是一个编辑器它自己不会把C语言变成exe。你必须装一个C语言编译器。Windows平台上最主流的选择是MinGW-w64和TDM-GCC。MinGW-w64是GCC在Windows上的移植版本适合大多数人。TDM-GCC则是在MinGW-w64基础上做了进一步打包自带安装向导对新手更友好。我的建议是如果你只是想快点跑起来直接装TDM-GCC如果你以后可能要链接第三方库比如用SDL、OpenGL选MinGW-w64会更纯正。不过这些差距在入门阶段几乎感受不到你只需要记住装一个就行别同时装两个否则环境变量会打架。2.2 安装MinGW-w64的完整过程以MinGW-w64为例。下载的时候注意选择x86_64-posix-seh这个版本这是64位系统下最稳的组合。如果你用32位系统就选i686-posix-sjlj。下载下来是一个压缩包解压到一个路径不含中文和空格的目录比如D:\mingw64。解压完成后进入D:\mingw64\bin你应该能看到gcc.exe、g.exe、gdb.exe这些文件。接下来配置环境变量右键此电脑→属性→高级系统设置→环境变量在系统变量里找到Path点击编辑新建一条D:\mingw64\bin保存。这一步的作用是让你在命令行里直接输入gcc就能调用编译器Notepad调用编译器时依赖的也是这个PATH。验证是否配置成功按WinR输入cmd回车在命令行里输入gcc --version如果看到类似gcc (Rev5, Built by MSYS2 project) 13.x.x的输出说明编译器装好了。如果提示不是内部或外部命令多半是PATH没生效要么重启命令行要么重启电脑别急着怀疑自己装错了。3. Notepad本体与关键插件配置3.1 下载安装从官网到便携版Notepad官网下载即可选择完整安装版还是自带插件管理器。现在Notepad的安装包已经自带Plugin Admin可以直接搜索插件安装比较方便。我个人的习惯是用便携版zip解压免安装因为有时候在实验室或学校机房没有管理员权限也能直接用。便携版和安装版在功能上没有任何区别唯一的坑是如果你用便携版插件目录也在解压的文件夹里备份整个文件夹就能带走所有配置。3.2 必备插件NppExec与NppFTP先不用管后者在Notepad里配置编译运行最主流的方案是使用NppExec插件。打开插件菜单选择插件管理Plugin Admin搜索NppExec安装。装完重启Notepad后插件会出现在插件菜单下。NppExec的核心功能是让你在Notepad内部执行命令并且捕获输出。你可以在它的控制台里直接输入gcc test.c效果跟在CMD里一样。但如果你是新手可能更希望按一个快捷键就编译运行这个我们后面配置。注意NppExec不是唯一方案但它是免费、稳定、且支持自定义命令保存的方案。你也可以用运行菜单里的运行...直接输入命令但那个方式不能保存多组命令也不方便切换C和C所以我还是建议你装NppExec。3.3 配置NppExec的编译与运行命令打开插件→NppExec→Execute...或者按F6会弹出一个输入框。在这里输入编译命令。我的配置文件是这么写的cd $(CURRENT_DIRECTORY) gcc -Wall -stdc11 $(FILE_NAME) -o $(NAME_PART).exe npp_run $(NAME_PART).exe逐行解释一下cd $(CURRENT_DIRECTORY)切换到当前文件所在目录。这一步很重要否则gcc会默认在Notepad的工作目录下找文件容易报file not found。$(CURRENT_DIRECTORY)是NppExec提供的宏代表当前文件的路径。gcc -Wall -stdc11 $(FILE_NAME) -o $(NAME_PART).exe编译当前文件。-Wall打开所有警告-stdc11指定C语言标准你也可以改成-stdc99。$(FILE_NAME)是当前文件名$(NAME_PART)是去掉扩展名的文件名。这里没有指定绝对路径因为我们已经先cd过来了。npp_run $(NAME_PART).exe运行生成的exe。npp_run的含义是在控制台之外以独立窗口运行程序这样你的程序里如果有scanf等输入交互不会受到NppExec控制台输入缓冲的干扰。写完命令后点击Save...给它起个名字比如CompileRunC。然后在插件→NppExec→Advanced Options...里把这个脚本关联到Menu item这样你可以在插件菜单里直接点击运行。如果想用快捷键可以到设置→管理快捷键→插件命令里找到你关联的菜单项分配一个快捷键。我习惯用F8编译运行F7只编译不运行。这个二选一你随意。4. 踩坑实录我见过的最常见的五个问题4.1 明明装了编译器却提示gcc不是内部或外部命令这个问题八成是环境变量没配置对。检查Path里是否真的包含了D:\mingw64\bin注意是bin目录不是mingw64目录。再检查这个路径是否真的存在不要凭印象写。另外如果你用的MinGW是从一些奇怪的网站下的可能解压出来没有bin目录而是套了一层文件夹路径变成了D:\mingw64\mingw64\bin这种也要改过来。如果环境变量没问题但还是不行试试在Notepad里重启NppExec因为NppExec是启动时读取PATH的你修改PATH后它不一定自动刷新。最稳妥的办法是重启Notepad。4.2 编译成功了但运行时输出中文乱码这是编码问题。Notepad默认使用UTF-8编码但Windows控制台默认使用GBK旧版或UTF-8新版。当你用printf(中文)输出中文时如果源代码是UTF-8而控制台按GBK解码就会乱码。解决办法有两个在Notepad右下角把编码改成ANSIGBK。这样编译出的exe里的中文字符串是GBK编码Windows控制台能正常显示。缺点是源代码文件编码是GBK以后如果放到Linux或macOS上打开中文可能显示乱码。在代码开头加上system(chcp 65001);强制控制台切换到UTF-8编码。但这个办法依赖控制台环境不一定每次都可靠。我的建议是学习阶段尽量用英文输出或者只在Notepad里用UTF-8编码运行时如果乱码就切换控制台字体和代码页。顺便说一句这个坑在VS Code里也存在不是你配置错了。4.3 编译时报undefined reference to main这个很经典。你有两个文件a.c和b.c你只编译了a.c但它的main函数在b.c里。gcc在链接时找不到main入口。解决办法用Notepad打开所有需要编译的源文件然后在NppExec里把文件名写全比如gcc -Wall -stdc11 a.c b.c -o program.exe或者干脆把所有.c文件都编译gcc -Wall -stdc11 *.c -o program.exe注意在Linux下这种通配符由shell展开在Windows下由gcc自己实现所以也能用。但如果你的目录里有无关的.c文件可能会编译报错这时候还是老老实实列文件名。4.4 路径包含空格导致命令执行失败比如你的用户目录是C:\Users\Zhang San\Desktop$(CURRENT_DIRECTORY)展开后变成了C:\Users\Zhang San\Desktop在NppExec里直接执行gcc test.c因为路径含有空格命令解析会出错。解决办法在上面的脚本中所有引用文件路径的地方都加上双引号。我已经写好双引号了但你如果是从网上复制别人的旧脚本很多都没有加引号就容易踩这个坑。如果加了引号还是不行检查NppExec的Cmds配置里是否启用了//的转换。在插件→NppExec→Execute...里注意命令前面的勾选项Replace text like $(...)一般保持默认即可。4.5 运行一闪而过看不到输出结果这个问题几乎天天有人问。因为你运行的是命令行程序程序执行完窗口就自动关闭了。解决方法是在程序末尾临时加一行system(pause);或者用更规范的方式getchar();system(pause)会显示请按任意键继续适合调试。但如果你写的程序本来就需要输入比如scanf之后system(pause)可能会被残留的回车键跳过。这时候用getchar()相对安全。不过我不建议在最终提交的代码里加这个它只是保证你看到结果而已。5. 进一步优化让Notepad更像IDE5.1 语法检查与自动补全Notepad自带C语言语法高亮但自动补全很弱。你可以安装插件AutoCompletion或者GNU Source-Highlight但两者学习成本都不低。我自己的方式是放弃自动补全直接用CtrlSpace手动触发关键字补全。Notepad预置了C语言的关键词和常用库函数够用。如果你实在需要更智能的补全可以考虑把文件关联到Clang这类插件但那已经偏离轻量的初衷了。5.2 一键保存再编译我上面的脚本没有保存文件这一步。如果你修改了代码后直接按F8NppExec执行的是磁盘上旧的代码编译器编译的也是旧文件。所以你要么每次按F8前手动CtrlS要么在脚本开头加上一行npp_savenpp_save是NppExec的命令表示保存当前文件。加上这句后按F8就能自动保存并编译运行。强烈建议加上。我自己所有的编译脚本都加这句不然迟早会误编译旧版本。5.3 增加c支持如果你想在Notepad里顺便写C那么再建一个脚本npp_save cd $(CURRENT_DIRECTORY) g -Wall -stdc14 $(FILE_NAME) -o $(NAME_PART).exe npp_run $(NAME_PART).exe注意把gcc换成g。当然前提是你的MinGW里已经包含了g编译器一般都有。5.4 输出窗口的中文乱码与滚动NppExec下方的控制台窗口实际上是从编译器输出的UTF-8文本。如果你用ANSI编码保存源代码那么gcc输出的信息是ANSINppExec控制台按UTF-8解码就可能出现乱码。这个问题的根治办法是统一用UTF-8编码源代码然后在NppExec控制台里右键选择Settings在Console部分勾上UTF-8。控制台滚动条有时候会粘住鼠标滚轮不生效。这时候在控制台右键勾选Follow $(CURRENT_DIRECTORY)可以让输出自动滚动到底部方便看到最后的错误信息。6. 从单个文件到多文件用MinGW直接搞定Make6.1 为什么要考虑多文件项目入门时你写的是几百行的单文件C程序。但当你学到结构体、链表、或者想组织一个项目时单文件的代码会越来越臃肿。这时候你需要把不同功能的代码拆到不同.c文件里并用头文件声明接口。IDE比如VS Code需要配置task来逐一编译链接而Notepad这边只要你会写Makefile一样能编译多文件项目。6.2 一个最简单的Makefile模板假设你有一个项目目录里面有main.c、utils.c、utils.h。你可以新建一个Makefile文件内容如下CC gcc CFLAGS -Wall -stdc11 -g OBJS main.o utils.o program: $(OBJS) $(CC) $(CFLAGS) -o program $(OBJS) main.o: main.c utils.h $(CC) $(CFLAGS) -c main.c utils.o: utils.c utils.h $(CC) $(CFLAGS) -c utils.c clean: del *.o program.exe注意Makefile里的缩进必须是Tab不能是空格。在Notepad里编辑Makefile时默认的Tab可能会被替换为空格你需要在设置→首选项→语言→Makefile里禁用转换为空格。否则make会报missing separator错误。然后在NppExec脚本里可以这样npp_save cd $(CURRENT_DIRECTORY) make npp_run program.exe前提是你已经把Makefile放到了当前目录并且make命令在PATH里。MinGW-w64自带mingw32-make.exe但没有命名为make。你可以把mingw32-make.exe复制一份改名为make.exe或者直接在脚本里用mingw32-make。我习惯改名因为这样兼容性与Linux一致。6.3 头文件搜索路径与库链接如果你把头文件放在子目录include里编译时要加-Iinclude。链接第三方库时需要-Llibpath -llibname。这些在Makefile里写清楚就行。Notepad这边不需要额外配置它只是调用make命令。有时候你编译报错cannot find -lxxx意思是找不到某个库。检查库文件是否真的在-L指定的路径里且库名是否以lib开头、以.a或.dll结尾。Windows下GCC链接库的命名规则与Linux不同比如你有一个foo.libgcc会认为你需要的是foo这个库然后去找libfoo.a或libfoo.dll。这个坑比较隐蔽遇到时多留个心眼。7. 额外补充C语言学习路上的几个自查点7.1 用-Wall -Wextra看待警告很多初学者把警告当不存在。实际上编译器的警告往往暗示着潜在问题。比如你写if (a 1)编译器会警告assignment in condition这就是一个经典错误。我建议你一直开着-Wall -Wextra -g。-g是生成调试信息虽然我们不一定用gdb但它能让你在崩溃时得到更多线索。7.2 指针与内存管理相关的溢出问题既然说到了C语言环境配置顺便聊聊学习过程中的一个自查点当你学到指针和内存管理时最容易出现非法地址访问。比如int *p; *p 10; // 野指针赋值这段代码在Notepad里编译不会报错但运行时可能直接程序停止工作。你可以试试在代码里加printf(p%p\n, p);来查看指针地址但更推荐的方式是用调试器。Notepad本身不带调试器但你可以配合MinGW的gdb在命令行里调试。粗浅的用法是gdb program.exe然后在gdb里输入break main、run、print p。虽然麻烦但对于理解指针内存布局非常有用。如果你不想用gdb我建议你在编译时加-fsanitizeaddress仅限GCC 4.8以上且MinGW环境支持它能在运行时帮你检测越界、野指针等问题。实测下来对学习阶段的代码很有帮助gcc -Wall -Wextra -g -fsanitizeaddress test.c -o test.exe不过需要注意的是-fsanitizeaddress在Windows下有时需要额外的动态库如果你遇到找不到libasan.dll之类的提示说明你的MinGW版本不完整换个官方版本或TDM-GCC即可。7.3 关于必背100代码和刷题的建议热搜词里有c语言必背100代码我不知道别人怎么推荐但我自己的体会是不要死背也不要只看不练。环境配好之后最简单的训练方式是把每个知识点都变成一个小程序跑一遍。学运算符时写一个打印表达式求值过程的程序学字符串函数时自己实现一个strcpy看看会出什么问题。NotepadMinGW就是为这种高频小实验准备的编译运行快没有IDE的卡顿感。等你哪天觉得频繁打开Notepad有点累再换VS Code或JetBrains也不迟。8. 我自己的配置备份与最终建议最后分享一份我用于Notepad的NppExec脚本备份你可以直接用。打开NppExec的Execute...粘贴以下内容保存为RunCnpp_save cd $(CURRENT_DIRECTORY) gcc -Wall -Wextra -stdc11 $(FILE_NAME) -o $(NAME_PART).exe npp_run $(NAME_PART).exe再保存一个CompileOnlynpp_save cd $(CURRENT_DIRECTORY) gcc -Wall -Wextra -stdc11 $(FILE_NAME) -o $(NAME_PART).exe在Advanced Options...里把这两个脚本加到菜单然后去管理快捷键里给它们分别绑定F8和F7。这样你在Notepad里写C语言的基本流程就是新建文件写代码按F8看到结果。至于字体和主题我建议在设置→语言格式设置里选一个暗色主题比如Obsidian并把字体调成Consolas或Fira Code。好的字体能减少眼睛疲劳长时间刷题很重要。这里要注意如果你的程序里有中文注释暗色主题的注释颜色可能偏暗可以手动改一下注释色值。归根结底工具只是手段写代码本身才是核心。我在实际教学里看到太多人花了两天时间折腾编辑器最后连一个Hello World都没写完。Notepad这条路之所以值得推荐就是因为它把环境门槛降到了最低。等你哪天发现它不够用了再去拥抱更强大的工具那时候你已经不会被工具本身难住了。希望这篇文章能帮你把宝贵的时间留给C语言本身。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。