2013-03-06 59 views
3

这包括三个问题链接:静态,全局和多个翻译单元

1)您究竟如何确定多个翻译单元?当然,所有的源文件和头文件都会“连接”在一起,否则你最终会得到代码调用代码,这些代码不是该“程序”的一部分。翻译单位不是一个程序吗?

2)如何静态对象/班,关于多个翻译单位工作?如果不同翻译单元中的几个源文件包含一个可创建对象(拥有静态数据成员)的头文件,那么每个翻译单元是否会有单独的静态数据成员?

3)类似的问题2,做全局变量得到跨越多个翻译单元共享(有点像我这表明他们只是一起编译???独立的程序 - )或做全局变量还是要采取....全球跨越所有翻译单位?

+0

https://en.wikipedia.org/wiki/Linker_(computing)可能会帮助你。 – 2013-03-06 22:15:19

回答

6

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

2)连接器将消除副本。

3)是,参见2)

1
  1. 不,它们每个被编译成其随后连接在一起的一个目标文件。

  2. 如果对象是声明,但在头,这是更好的做法没有定义,那么将只是定义(假设它其实是在一个源文件中定义的)一个对象,大家谁包括标题将有一个编程方式。

    static源文件中的对象将会在 看起来是全局范围的情况下在 翻译单元之外无法访问。在任何类别或功能之外,static将范围限制在翻译单元的范围内 。

  3. 非静态范围内的对象,是的,他们做的。

+0

关于1号,如果答案是“否”,那么什么是需要考虑一个“翻译单位”混合内联和静态代码时的目的是什么? – user997112 2013-03-06 22:53:58