预处理与编译

全屏查看

1 C++ 预处理阶段 #

mindmap
    id1[C++ 预处理阶段]
        id1-1[预处理器概述]
        id1-2[预处理器的作用与工作流程]
        id1-3[预处理指令的基本语法]
        id1-4[预处理阶段与编译阶段的区别]
        id1-5[宏定义与宏展开]
        id1-6[#define 指令详解]
        id1-7[带参数宏的定义与使用]
        id1-8[宏与内联函数的比较]
        id1-9[预定义宏 __FILE__, __LINE__, __DATE__等]
        id1-10[文件包含]
        id1-11[#include 指令的工作原理]
        id1-12[系统头文件与用户头文件]
        id1-13[头文件保护与#pragma once]
        id1-14[头文件包含的最佳实践]
        id1-15[条件编译]
        id1-16[#if, #ifdef, #ifndef, #else, #elif, #endif]
        id1-17[条件编译的应用场景]
        id1-18[平台相关代码的条件编译]
        id1-19[调试代码的条件编译]
        id1-20[其他预处理指令]
        id1-21[#error 与 #warning]
        id1-22[#line 指令]
        id1-23[#pragma 指令]
        id1-24[预处理器操作符 #, ##]
预处理器概述
预处理器的作用与工作流程
预处理指令的基本语法
预处理阶段与编译阶段的区别
宏定义与宏展开
#define 指令详解
带参数宏的定义与使用
宏与内联函数的比较
预定义宏 __FILE__, __LINE__, __DATE__等
文件包含
#include 指令的工作原理
系统头文件与用户头文件
头文件保护与#pragma once
头文件包含的最佳实践
条件编译
#if, #ifdef, #ifndef, #else, #elif, #endif
条件编译的应用场景
平台相关代码的条件编译
调试代码的条件编译
其他预处理指令
#error 与 #warning
#line 指令
#pragma 指令
预处理器操作符 #, ##

2 C++ 编译阶段 #

编译器工作流程
词法分析
语法分析
语义分析
中间代码生成
词法分析
标识符与关键字
字面量处理
运算符与分隔符
注释处理
语法分析
抽象语法树 AST 构建
语法错误检测
表达式解析
语句解析
语义分析
类型检查
符号表管理
作用域解析
函数重载解析
中间代码生成
地址码
静态单赋值形式 SSA
控制流图构建
数据流分析
mindmap
    id2[C++ 编译阶段]
        id2-1[编译器工作流程]
        id2-2[词法分析]
        id2-3[语法分析]
        id2-4[语义分析]
        id2-5[中间代码生成]
        id2-6[词法分析]
        id2-7[标识符与关键字]
        id2-8[字面量处理]
        id2-9[运算符与分隔符]
        id2-10[注释处理]
        id2-11[语法分析]
        id2-12[抽象语法树 AST 构建]
        id2-13[语法错误检测]
        id2-14[表达式解析]
        id2-15[语句解析]
        id2-16[语义分析]
        id2-17[类型检查]
        id2-18[符号表管理]
        id2-19[作用域解析]
        id2-20[函数重载解析]
        id2-21[中间代码生成]
        id2-22[地址码]
        id2-23[静态单赋值形式 SSA]
        id2-24[控制流图构建]
        id2-25[数据流分析]

3 编译优化技术 #

mindmap
    id3[编译优化技术]
        id3-1[优化级别与策略]
        id3-2[O0, O1, O2, O3 优化级别]
        id3-3[调试版本与发布版本]
        id3-4[编译器优化选项]
        id3-5[局部优化]
        id3-6[常量折叠与传播]
        id3-7[公共子表达式消除]
        id3-8[死代码消除]
        id3-9[循环优化]
        id3-10[全局优化]
        id3-11[内联函数优化]
        id3-12[尾调用优化]
        id3-13[寄存器分配优化]
        id3-14[指令调度]
        id3-15[链接时优化 LTO]
        id3-16[LTO 工作原理]
        id3-17[跨模块优化]
        id3-18[全程序优化]
        id3-19[LTO 的优缺点]
优化级别与策略
O0, O1, O2, O3 优化级别
调试版本与发布版本
编译器优化选项
局部优化
常量折叠与传播
公共子表达式消除
死代码消除
循环优化
全局优化
内联函数优化
尾调用优化
寄存器分配优化
指令调度
链接时优化 LTO
LTO 工作原理
跨模块优化
全程序优化
LTO 的优缺点

4 模板与编译 #

模板实例化
函数模板实例化
类模板实例化
显式实例化与隐式实例化
模板特化与偏特化
模板元编程
编译时计算
类型特征 type traits
SFINAE 原则
可变参数模板
模板编译问题
模板定义位置问题
分离编译与模板
模板显式实例化声明
导出模板 已废弃
mindmap
    id4[模板与编译]
        id4-1[模板实例化]
        id4-2[函数模板实例化]
        id4-3[类模板实例化]
        id4-4[显式实例化与隐式实例化]
        id4-5[模板特化与偏特化]
        id4-6[模板元编程]
        id4-7[编译时计算]
        id4-8[类型特征 type traits]
        id4-9[SFINAE 原则]
        id4-10[可变参数模板]
        id4-11[模板编译问题]
        id4-12[模板定义位置问题]
        id4-13[分离编译与模板]
        id4-14[模板显式实例化声明]
        id4-15[导出模板 已废弃]

5 编译错误与调试 #

mindmap
    id5[编译错误与调试]
        id5-1[常见编译错误]
        id5-2[语法错误]
        id5-3[类型不匹配错误]
        id5-4[链接错误]
        id5-5[模板实例化错误]
        id5-6[编译器诊断信息]
        id5-7[错误信息解读]
        id5-8[警告信息处理]
        id5-9[静态分析工具]
        id5-10[代码质量检查]
        id5-11[调试信息生成]
        id5-12[调试符号表]
        id5-13[GDB/LLDB 调试支持]
        id5-14[核心转储分析]
        id5-15[性能分析工具]
常见编译错误
语法错误
类型不匹配错误
链接错误
模板实例化错误
编译器诊断信息
错误信息解读
警告信息处理
静态分析工具
代码质量检查
调试信息生成
调试符号表
GDB/LLDB 调试支持
核心转储分析
性能分析工具

6 现代编译技术 #

模块系统 C++20
模块的概念与优势
模块声明与定义
模块接口与实现
模块与传统头文件的对比
概念与约束 C++20
概念定义与使用
约束表达式
概念与模板的集成
概念的错误信息改进
编译时反射
静态反射提案
类型信息获取
编译时代码生成
元编程的未来发展
mindmap
    id6[现代编译技术]
        id6-1[模块系统 C++20]
        id6-2[模块的概念与优势]
        id6-3[模块声明与定义]
        id6-4[模块接口与实现]
        id6-5[模块与传统头文件的对比]
        id6-6[概念与约束 C++20]
        id6-7[概念定义与使用]
        id6-8[约束表达式]
        id6-9[概念与模板的集成]
        id6-10[概念的错误信息改进]
        id6-11[编译时反射]
        id6-12[静态反射提案]
        id6-13[类型信息获取]
        id6-14[编译时代码生成]
        id6-15[元编程的未来发展]

7 跨平台编译 #

mindmap
    id7[跨平台编译]
        id7-1[编译器差异]
        id7-2[GCC 与 Clang 特性对比]
        id7-3[MSVC 编译器特性]
        id7-4[编译器扩展语法]
        id7-5[标准符合性检查]
        id7-6[构建系统]
        id7-7[Makefile 编写]
        id7-8[CMake 构建系统]
        id7-9[自动化构建流程]
        id7-10[依赖管理]
        id7-11[交叉编译]
        id7-12[交叉编译工具链]
        id7-13[目标平台配置]
        id7-14[库依赖处理]
        id7-15[调试与测试]
编译器差异
GCC 与 Clang 特性对比
MSVC 编译器特性
编译器扩展语法
标准符合性检查
构建系统
Makefile 编写
CMake 构建系统
自动化构建流程
依赖管理
交叉编译
交叉编译工具链
目标平台配置
库依赖处理
调试与测试

8 编译原理实践 #

编译器前端实现
词法分析器实现
语法分析器实现
语义分析器实现
错误恢复机制
编译器后端实现
代码生成器设计
目标代码优化
寄存器分配算法
指令选择与调度
自定义语言编译
领域特定语言 DSL 设计
语言语法设计
编译器框架选择
运行时环境构建
mindmap
    id8[编译原理实践]
        id8-1[编译器前端实现]
        id8-2[词法分析器实现]
        id8-3[语法分析器实现]
        id8-4[语义分析器实现]
        id8-5[错误恢复机制]
        id8-6[编译器后端实现]
        id8-7[代码生成器设计]
        id8-8[目标代码优化]
        id8-9[寄存器分配算法]
        id8-10[指令选择与调度]
        id8-11[自定义语言编译]
        id8-12[领域特定语言 DSL 设计]
        id8-13[语言语法设计]
        id8-14[编译器框架选择]
        id8-15[运行时环境构建]