"《C++ primer plus》读书笔记(三)——C++程序构成、头文件、编译过程、存储持续性、栈、链接性及变量声明"
在深入学习C++编程时,理解程序的基本组成至关重要。第九章介绍了C++程序的三个主要组成部分:
1. 头文件:头文件通常包含了函数的原型声明、符号常量定义(#define或const)、结构体声明、类声明、模板声明以及内联函数。头文件有两种包含方式:尖括号`< >`用于寻找标准库头文件,双引号`" "`则会先查找当前目录,然后是标准位置。为了避免重复包含,通常使用预处理器指令`#ifndef`、`#define`和`#endif`来保护头文件。
2. 源代码文件:这些文件包含了实现特定功能的函数代码,以及调用这些函数的主体代码。头文件通常只包含声明,而源代码文件则包含实际的函数实现。
3. 编译过程:C++程序的构建通常包括预处理、编译和链接三个步骤。预处理合并头文件和源代码,生成中间的预处理文件;接着编译器将这些文件转化为目标代码;最后,链接器将所有目标代码与库和启动代码结合,生成可执行文件。
4. 存储持续性:这是关于变量生命周期的概念,包括:
- 自动存储持续性:如栈上的局部变量,生命周期局限于定义它们的代码块。
- 静态存储持续性:全局变量和静态局部变量,即使函数调用结束,它们依然存在。
- 线程存储持续性(C++11引入):线程局部存储,每个线程拥有自己的副本。
- 动态存储持续性:通过new运算符动态分配的内存,需要程序员手动管理。
5. 栈:栈是一种后进先出的数据结构,用于存储自动变量。栈上的数据在相邻的内存单元中,使用两个指针跟踪栈顶和栈底。
6. 链接性:定义了变量和函数的可见范围:
- 外部链接性:可以跨文件访问,未使用`static`修饰的全局变量和函数具有此特性。
- 内部链接性:仅限于当前文件,如`static`修饰的全局变量。
- 无链接性:如局部变量,仅在当前作用域有效。
7. 变量声明:C++中的声明和定义有明确区分:
- 定义声明:分配存储空间并初始化变量。
- 引用声明:不分配空间,而是创建一个别名,引用已存在的变量。`extern`关键字用于声明但不定义变量,通常用于告诉编译器变量在其他地方定义。
了解以上知识点,对于编写高效、可维护的C++代码至关重要。在编写程序时,应合理组织头文件和源代码,正确处理存储持续性,理解栈的工作原理,根据需要选择适当的链接性,并遵循良好的变量声明习惯。这将有助于提升代码质量,减少错误,并提高程序的可读性和可维护性。