在线编译器练C++应选支持C++17/20及完整标准库的平台,如Compiler Explorer(支持ASan但无输入)和OnlineGDB(支持cin与调试),避免<bits/stdc++.h>及栈溢出问题。

直接用,不用装环境、不配工具链、不改系统 PATH —— 这就是在线编译器对 C++ 练习最实在的价值。但不是所有平台都适合练 C++,选错会卡在 #include <bits/stdc++.h> 报错、std::thread 无法启动、或连 std::filesystem 都找不到。
选支持 C++17/20 且带标准库的在线编译器
很多“C/C++ 在线编译器”默认只开 C11 或 C++14,而你写的 std::optional、std::span、甚至 std::format(GCC 13+)会直接编译失败。别信首页写的“支持 C++”,要看实际编译命令或设置项。
- Compiler Explorer(godbolt.org):默认用 Clang/GCC 最新版,可手动切
-std=c++20,<thread>、<coroutine>全能跑,但**不支持运行时输入交互**(std::cin会卡住) - OnlineGDB:选 “C++17” 或 “C++20” 模式后,
std::cin可用,std::filesystem在 GCC 11+ 环境下可用(需确认右上角显示的 GCC 版本) - JDoodle 和 Programiz:部分版本禁用
<thread>和<mutex>(报错undefined reference to pthread_create),练并发前先跑个最小例程验证
避免 #include <bits/stdc++.h> 导致的兼容性问题
这头文件在本地 GCC 环境很爽,但在多数在线平台是“隐藏扩展”,Clang 不认、MSVC 没这玩意儿、某些 Docker 容器里压根没生成。线上一贴就报 fatal error: bits/stdc++.h: No such file or directory。
- 练算法题(LeetCode 风格):老老实实用
#include <iostream>、#include <vector>、#include <algorithm>—— 明确写出来,也帮你养成规范习惯 - 想快速试 STL 特性?直接查 cppreference.com,按需包含,比如试
std::ranges::sort就加#include <ranges>,别偷懒 - 如果平台真支持
<bits/stdc++.h>(如某些旧版 OnlineGDB),也别依赖它——本地开发时很可能编译不过,形成“线上能跑、本地炸锅”的幻觉
调试段错误和内存越界不能只靠输出
在线编译器普遍不提供 GDB 图形界面,std::cout << "here" 打点法效率低,还可能因缓冲未刷而漏掉关键信息。真正卡住时得换策略:
立即学习“C++免费学习笔记(深入)”;
- Compiler Explorer 开启 “Compilation > Show all warnings” + “Runtime > Run with ASan”(AddressSanitizer),能直接标出
heap-use-after-free或stack-buffer-overflow - OnlineGDB 支持“Debug”按钮,但仅限单线程程序;设断点后注意看变量值窗口是否显示
(optimized out)—— 那说明开了-O2,关掉优化再试 - 遇到
Segmentation fault (core dumped)却找不到哪行?把疑似问题函数拆成小块,逐段注释运行;特别是new/delete、std::vector::data()、reinterpret_cast这几类操作
真正容易被忽略的是:在线环境的 ulimit -s(栈大小)通常只有 8MB,远小于本地的 8MB~64MB。递归深度稍大(比如 DFS 走 10000 层)、或局部数组开太大(int a[1000000]),就会静默崩溃,连错误信息都不给。这种问题,在线编译器不会提醒你“栈溢出”,只会“Process exited with status 139”。


















