AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 30
构建阶段:preprocessing → compile → link
C++ SELF
等级 30,
课时 0
解析 IDE 中“Run”按钮真正做了什么:预处理器如何展开
#include
和宏(
#define
,
#if
),编译器如何把每个
.cpp
变成目标文件(
.o
/
.obj
),以及链接器如何把一切粘合成可执行文件,寻找(或未能找到)符号的定义。过程中引入了
translation unit
概念,并把它与常见的构建错误和
ODR
联系起来。
编译错误 vs 链接错误
C++ SELF
等级 30,
课时 1
解析 C++ 中
compile error
与
link error
的区别:问题在哪个阶段出现,为什么编译器只需要声明而链接器需要定义,以及如何在 10 秒内根据日志中的单词
expected
、
was not declared
、
undefined reference
和
multiple definition
来分类。以小型项目
TaskBox
为例,展示典型场景:遗漏的
;
、缺失的
#include
、没有参与构建的
.cpp
以及签名不匹配导致的问题。
Warnings: 为什么它们是未来的 bug
C++ SELF
等级 30,
课时 2
我们分析为什么编译器的警告在 C++ 中不是“噪音”,而是对未来错误的早期信号:不明显的意图、类型边界的风险(signed/unsigned)、可能导致数据丢失的隐式转换、可疑的条件(
=
而不是
==
),以及通过
[[nodiscard]]
忽略重要结果。通过一个活生生的示例
TodoLite
学习如何不慌不忙地阅读警告并修复它们,使代码意图变得明确。
警告策略: “warnings as errors”
C++ SELF
等级 30,
课时 3
解析为什么应将 C++ 编译器的警告视为潜在故障的早期信号,以及“
warnings as errors
”做法如何工作:如何处理
unused
变量和参数(包括使用
static_cast
<
void
>
的做法)、如何避免在使用
std::size_t
遍历时出现的
signed
/
unsigned
陷阱,以及为什么应有意处理隐式转换(例如
double
→
int
)。最后 —— 给出 MiniTracker 的示例、mermaid 构建流程图以及引入严格策略时常见错误的解析。
迷你诊断工具箱:打印、assert、日志消息
C++ SELF
等级 30,
课时 4
一组用于快速调试 C++ 控制台程序的实用方法:将“正确输出”和通过
std::cout
/
std::cerr
的诊断分开,使用
assert
检查内部契约,通过
log_debug
/
log_error
函数与开关
ENABLE_DEBUG_LOGS
整理消息。所有示例都在教学应用
MiniTasks
中演示,并辅以短循环“假设 → 验证 → 修正”。
Please enable JavaScript to continue using this application.