pdf文档 Back to Basics: The structure of a Program

390.34 KB 64 页 0 评论
语言 格式 评分
英语
.pdf
3
摘要
文档阐述了C++程序的基本结构和构建过程,包括translation unit的概念、翻译阶段的划分、声明与定义的关系、one-definition rule(ODR)的应用、存储时期的管理、ABI与符号重排的作用,以及链接和加载机制。文档通过实例说明了ODR在不同translation unit中的有效和无效用法,并探讨了这些概念在C++编译和链接过程中的重要性。
AI总结
《Back to Basics: The Structure of a Program》讲座由Bob Steagall在CppCon 2020大会上发表,主要介绍了C++程序的结构及其构建过程。以下是文档内容的核心要点总结: 1. **程序构建概述** - 程序构建涉及翻译单元(Translation Unit, TU)、翻译阶段、声明与定义、链接、存储持续时间(Storage Duration)、应用程序二进制接口(ABI)和链接加载等关键概念。 - 目标是帮助理解C++编译和链接的基本原理。 2. **输入文件** - 包括用户自定义代码、头文件(如.h、.hpp)、源文件(如.cpp、.c)、资源文件(如.res、.qrc)以及依赖项(如库文件)。 - 预编译文件(如.lib、.so、.dll)和资源文件(如图标、图片、多语言支持)在构建过程中也起重要作用。 3. **翻译阶段** - 包括预处理、词法分析、语法分析、语义分析和生成中间代码等阶段。 4. **声明、定义与链接** - 声明用于说明符号的存在,定义用于具体实现。 - 链接是将不同TU生成的代码整合成最终可执行文件的过程。 5. **单一定义规则(ODR)** - ODR规定在整个程序中,一个符号只能有一个定义,但可以有多个声明。 - 示例: - 合法:`extern int const x;`(声明)和`extern int const x = 0;`(定义)在不同TU中。 - 非法:在两个TU中都定义`extern int const x = 0;`。 6. **存储持续时间** - 包括静态存储(Static)、线程存储(Thread)、自动存储(Automatic)和动态存储(Dynamic)。 7. **ABI与名称粉碎** - ABI(应用程序二进制接口)定义了二进制兼容性的标准,包括函数调用方式、名称粉碎机制(Name-mangling)等。 8. **链接与加载** - 链接分为编译时链接(处理OBJECT文件和LIB)和运行时链接(动态链接)。 通过梳理这些内容,讲座旨在帮助开发者更好地理解C++程序的结构和构建过程,避免常见的链接和定义相关错误。
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
下载文档到本地,方便使用
- 可预览页数已用完,剩余 52 页请下载阅读 -
文档评分
请文明评论,理性发言.