AI Academy
促销
CodeGym University
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题
课时
评论
关于我们
开始
开始学习
立即开始学习
我的进度
课程
任务地图
课程
C++
C++
级别 28
#include 的工作原理:搜索路径顺序,<> 与 "" 的区别
C++ SELF
等级 28,
课时 0
我们来解析预处理指令
#include
实际上做了什么,
<
...
>
与
"..."
两种形式有何不同,头文件的搜索顺序如何组织(本地目录、项目的 include 目录、系统路径),为何通过
include/
保持稳定的 include 路径很重要,以及如何调试类似
file not found
的错误和同名头文件冲突。
宏 #define:风险与命名约定
C++ SELF
等级 28,
课时 1
我们来拆解 C++ 预处理器的本质,以及为什么宏(
#define
)是危险的:它们在编译前以文本替换的方式工作,忽略类型和作用域。通过示例展示运算符优先级、重复求值和副作用、多行宏,以及惯用法
do
{ ... }
while
(
false
)。另外还会总结实用的命名规则(项目前缀
TT_
、
ALL_CAPS
),以及一个“合适”的日志宏案例,配合
__FILE__
/
__LINE__
。
条件编译 — 针对平台和特性的 #if/#ifdef
C++ SELF
等级 28,
课时 2
解析 C++ 条件编译:预处理指令
#if
/
#ifdef
与普通
if
有何不同,哪些指令用于平台与特性 (
#ifdef
,
#ifndef
,
#elif
,
#endif
, 操作符
defined
),如何通过
config.hpp
组织配置,以及为什么“未选中”的分支可能多年保持损坏。最后 — 一个实用迷你记录器和典型错误。
constexpr / inline / template 代替宏
C++ SELF
等级 28,
课时 3
我们分析为什么宏作为“文本魔法”是危险的,以及在现代 C++ 中用什么替代它们:通过
inline
constexpr
做配置,使用
constexpr
函数做计算,通过
template
实现通用工具,以及预处理器唯一“合理”的用例 —— 捕获调用位置,通过
__FILE__
/
__LINE__
。最后 — 一张速查表和在
mermaid
中的选择方案图。
宏调试
C++ SELF
等级 28,
课时 4
我们分析为什么由宏引起的错误经常“不在调用处报错”,而是在意想不到的行:编译器看到的是预处理阶段之后展开的文本(
#include
,
#define
,
#if
)。学习如何查看“预处理后的文件”,捕捉运算符优先级的陷阱(
SQUARE
和
*
/
+
)、参数被重复计算(
++
),以及如何通过
do
{ ... }
while
(
false
) 来写出安全的宏。最后——重构:仅为保留
__FILE__
/
__LINE__
保留宏,把逻辑移动到普通的 C++ 函数中。
Please enable JavaScript to continue using this application.