静态,全局和多个翻译单元

时间:2013-03-06 22:11:37

标签: c++ compiler-construction static global

这包括三个相关的问题:

1)您最终如何使用多个翻译单元?当然所有的源文件和头文件都会“加入”在一起,否则你最终会得到代码调用代码而不是那个“程序”的一部分。翻译单位不是一个程序吗?

2)静态对象/类如何处理多个翻译单元?如果不同翻译单元中的多个源文件包含一个标题,该标题会创建一个对象(具有静态数据成员),那么每个翻译单元会有一个单独的静态数据成员吗?

3)与问题2类似,全局变量是否在多个翻译单元之间共享(有点像我建议它们是单独的程序 - 只是编译在一起???)或全局变量仍然起作用....翻译单位?

2 个答案:

答案 0 :(得分:7)

1)每个源文件及其包含的头文件称为翻译单元。它被编译成目标文件。然后,链接器最终将所有目标文件加入到最终的可执行文件中。 (简化,但给你一个基本的想法)

2)链接器将删除副本。

3)是的,见2)

答案 1 :(得分:1)

  1. 不,它们都被编译成一个目标文件,随后链接在一起。

  2. 如果对象被声明但未在标题中定义,这是更好的做法,那么将只定义一个对象(假设它实际上只在一个源中定义文件),包含标题的每个人都可以使用它进行编程。

    源文件中的

    static个对象,否则就会出现这些对象 似乎是全球范围,除此之外无法访问 翻译单位。在任何课程或职能之外,static限制 翻译单位的范围。

  3. 非静态范围的对象,是的,确实如此。