加 -mconsole 参数可修复该错误,因链接器默认按 Windows GUI 子系统寻找 WinMain 入口,而控制台程序需显式指定 -mconsole 以启用 main 入口。

g++报“undefined reference to `WinMain'”怎么修
这不是代码写错了,是链接器默认按 Windows GUI 子系统找入口函数,但你的 main() 是控制台程序。不加 -mconsole,编译能过,链接直接失败。
在 NppExec 脚本里,把编译命令改成:g++ -mconsole -std=c++17 -o "$(NAME_PART).exe" "$(FULL_CURRENT_PATH)"
- 必须加
-mconsole,哪怕只用#include <stdio.h> - 如果用了
#include <windows.h>却没写WinMain,更得加 -
-mwindows是反向操作,只用于真正无黑框的 GUI 程序(且实现了WinMain)
PATH 没生效?Notepad++ 根本找不到 g++.exe
Notepad++ 启动时读一次系统 PATH,改完环境变量不重启它,就永远找不到编译器。常见错误:路径含空格(比如 C:\Program Files\MinGW\bin),或没加到系统 PATH 里。
- MinGW 安装路径别带空格,推荐
C:\MinGW或D:\mingw64 - 确认 PATH 里加的是
bin目录,不是根目录(例如C:\MinGW\bin,不是C:\MinGW) - 改完 PATH 后,必须彻底关闭 Notepad++(包括托盘进程),再重新打开
- 验证方式:在 Notepad++ 里按
F6→ 输入g++ --version,回车看是否输出版本号
NppExec 脚本里 $(CURRENT_DIRECTORY) 和 $(FULL_CURRENT_PATH) 别混用
这两个变量行为不同:$(CURRENT_DIRECTORY) 是文件所在目录路径(结尾无反斜杠),$(FULL_CURRENT_PATH) 是完整文件路径(含盘符和扩展名)。混用会导致编译失败或生成文件位置错乱。
立即学习“C语言免费学习笔记(深入)”;
- 编译命令里源文件要用
"$(FULL_CURRENT_PATH)"(带引号防空格) - 输出可执行文件路径建议用
"$(CURRENT_DIRECTORY)\$(NAME_PART).exe",而不是拼接$(FULL_CURRENT_PATH) - 脚本开头加
cd "$(CURRENT_DIRECTORY)",确保#include "xxx.h"这类相对路径能正确解析 - 未保存的文件没有
$(FULL_CURRENT_PATH),所以务必先保存再运行
为什么按 F5 没反应,或弹出“系统找不到指定的文件”
绝大多数情况是命令行参数格式崩了:引号漏了、等号前后有空格、变量名写错,或者脚本没绑定到快捷键。
- 所有含空格的路径必须用双引号包裹,比如
"$(FULL_CURRENT_PATH)",不能写成$(FULL_CURRENT_PATH) -
if判断语句里==两边不能有空格:if $(EXITCODE) == 0对,if $(EXITCODE) == 0错(看起来一样,但实际多了不可见字符) - 保存脚本后,必须进
Plugins → NppExec → Advanced Options → Menu items,把脚本拖到左栏并勾选,否则快捷键无效 - 快捷键设为
F5会覆盖原生功能,但这是最顺手的;若冲突,可改用Ctrl+F5


















