新建Code::Blocks控制台项目须选Console application模板,否则选Empty project会因链接子系统不匹配报“undefined reference to WinMain@16”;需改Build target为Console并添加-mconsole链接标志;默认C模板需替换头文件、加命名空间、确保.cpp后缀;窗口闪退应关掉环境设置中“Close console when program ends”选项。

Code::Blocks 里新建控制台项目的标准路径
直接选对项目模板是关键,否则后续改配置容易出错。Code::Blocks 不会自动识别你“想写控制台程序”,必须手动选 Console application 模板,而不是 Empty project 或 SDL application 等其他类型。
操作步骤很固定:
- 启动 Code::Blocks → File → New → Project…
- 左侧选
Console application,点 Go - 下一步填项目名和路径(路径别含中文或空格)
- 编译器选
GNU GCC Compiler(若没装 MinGW,这步会失败,需先配置) - 完成,自动生成
main.cpp和基础project.cbp文件
为什么点了“Empty project”后运行报错“undefined reference to `WinMain@16`”
这是最常见卡点:Empty project 默认按 Windows GUI 子系统链接,而 main() 函数属于控制台入口,链接器找不到匹配的启动符号。
解决不是改代码,而是改项目设置:
立即学习“C++免费学习笔记(深入)”;
- 右键项目名 → Properties → Build targets
- 把
Type从GUI application改成Console application - 再进 Project → Properties → Build options → Linker settings
- 确认
-mconsole在 linker flags 里(GCC 下必需) - 重新构建,错误消失
生成的 main.cpp 为什么不能直接用 std::cout?
新项目默认生成的是 C 风格模板,头文件只含 <stdio.h>,没开 C++ 标准库支持。
要正常使用 std::cout、std::string 等,必须手动改两处:
- 把
#include <stdio.h>换成#include <iostream> - 在
main()前加using namespace std;,或每次写std::cout - 确保文件后缀是
.cpp(不是.c),否则 GCC 会当 C 代码编译,拒绝 C++ 语法
运行后窗口一闪而退,怎么停住看输出?
这不是 Code::Blocks 的 bug,是控制台进程正常行为:程序执行完就退出,窗口关闭。
临时调试时加阻塞即可,但别用 system("pause")(依赖 Windows,不跨平台):
- 推荐在
return 0;前加:std::cin.get(); - 或者更稳妥:
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); std::cin.get();(防输入缓冲区残留) - 发布前删掉这些语句,否则用户得按回车才能退出
真正该检查的是:是否误勾了 Settings → Environment → General settings → “Close console when program ends” —— 这个选项优先级高于代码里的暂停逻辑,务必关掉。


















