C++内存模型和名称空间--多文件单独编译
C++存储数据,可以选择数据保存在内存中的时间长度(存储连续性),以及程序的那一部分可以访问数据(作用域和链接)等。
除此之外还可以用new来动态分配内存, 定位new运算符提供了这种技术的一种变种。
名称空间是另一种控制访问权的方式。
单独编译
c++鼓励将组件函数放在独立的文件中,单独编译后,把它们链接成可执行的程序。
修改了一个文件,则可以只重新编译该文件,然后将它和其他文件的编译版本链接。通常c++环境都有帮助管理的工具,例如make程序,可以跟踪程序的依赖文件,以及这些文件的最后修改时间。运行make如果他检测到上次编译后修改了源文件,make将记住重新构建程序所需的步骤。大多数集成开发环境都在project菜单中提供了类似的工具。
一个源文件可以分为三部分:
- 头文件:包含结构的声明和使用这些结构的函数的原型
- 源代码文件:包含与结构有关的函数的代码
- 源代码文件:包含调用与结构相关的函数的代码
该组织策略优点:
编写另一个程序,需要使用这些函数,则只需包含头文件,并将函数文件添加到项目列表或make列表中即可。
与oop方法一致:一个文件包含了用户定义类型的定义,另一个文件包含操作用户定义类型的代码。这两个文件组成了一个软件包可用于各种程序中。
需注意:
最好别把函数定义和变量声明放到头文件中;防止在同一个程序中,包含了一个函数或变量的多个重复定义
头文件中放的东西:
- 函数原型
- 使用#define定义的符号常量
- 使用const定义的符号常量 : 有特殊的链接属性
- 结构声明:告诉编译器如何创建结构变量
- 类声明
- 模板声明: 指示编译器生成与源代码中的函数调用相匹配的函数定义
- 内联函数: 有特殊的链接属性
在包含头文件时 “XX.h”编译器先在当前的工作目录或者源代码目录中查找;而 <XX.h>则直接在存储标准头文件的主机系统的文件系统中查找; 注意:在IDE中不要将头文件加入到项目列表中,也不要在源代码文件中使用#include来包含其他源代码文件。
头文件管理
在同一个文件中只能将同一个头文件包含一次。 经常用#ifndef #define XXX #endif来选择是否处理其中的语句;
这种方法并不能阻止编译器将文件包含两次,只是让它忽略除第一次包含以外的所有内容。
多个库的链接
C++标准允许每个编译器以自己的方式实现名称修饰
不同编译器创建的二进制模块很可能无法正确的链接,两个编译器为同一个函数生成不同的修饰名称,名称的不同将使链接器无法将一个编译器生成的函数调用与另一个编译器生成的函数定义匹配;因此,在链接模块时,请确保所有对象文件或库都是由同一个编译器生成的。
如果有源代码,可以用自己的编译器重新编译源代码来消除连接错误。
- C++ Primer Plus 第9章 内存模型和名称空间
- 【学习笔记】C++primer plus 9.内存模型与名称空间
- C++内存模型和名称空间--说明符和限定符
- C++内存模型和名称空间
- C++ Primer Plus学习:第九章 内存模型和名称空间(2)
- C++ Primer Plus-------内存模型与名称空间
- c++ primer plus 第9章 内存模型和名称空间
- 【C++】第9章 内存模型和名称空间 知识点总结
- 【C++ Primer plus】【第九章】内存模型和名称空间
- C++ Primer plus 学习笔记之第九章内存模型和名称空间(1)
- C++primer plus第九章--内存模型和名称空间
- C++ ➢ 内存模型和名称空间
- C++学习(十)内存模型和名称空间
- 【读书笔记:C++ primer plus 第六版 中文版】第9章 内存模型和名称空间
- 2020 我的C++的学习之路 第九章 内存模型与名称空间
- C++ Prime Plus 第9章内存模型和名称空间 编程练习答案和运行结果
- C++学习笔记3:内存模型和名称空间
- C++Prime Plus第9章 内存模型和名称空间知识点总结
- C++学习笔记六——内存模型和名称空间、关键字
- C++内存模型与名称空间(存储持续性、作用域、链接性、动态内存分配、命名空间)