这包括三个相关的问题:
1)您最终如何使用多个翻译单元?当然所有的源文件和头文件都会“加入”在一起,否则你最终会得到代码调用代码而不是那个“程序”的一部分。翻译单位不是一个程序吗?
2)静态对象/类如何处理多个翻译单元?如果不同翻译单元中的多个源文件包含一个标题,该标题会创建一个对象(具有静态数据成员),那么每个翻译单元会有一个单独的静态数据成员吗?
3)与问题2类似,全局变量是否在多个翻译单元之间共享(有点像我建议它们是单独的程序 - 只是编译在一起???)或全局变量仍然起作用....翻译单位?
答案 0 :(得分:7)
1)每个源文件及其包含的头文件称为翻译单元。它被编译成目标文件。然后,链接器最终将所有目标文件加入到最终的可执行文件中。 (简化,但给你一个基本的想法)
2)链接器将删除副本。
3)是的,见2)
答案 1 :(得分:1)
不,它们都被编译成一个目标文件,随后链接在一起。
如果对象被声明但未在标题中定义,这是更好的做法,那么将只定义一个对象(假设它实际上只在一个源中定义文件),包含标题的每个人都可以使用它进行编程。
源文件中的 static
个对象,否则就会出现这些对象
似乎是全球范围,除此之外无法访问
翻译单位。在任何课程或职能之外,static
限制
翻译单位的范围。
非静态范围的对象,是的,确实如此。