什么是C ++中的“翻译单元”

时间:2009-07-09 20:01:14

标签: c++

我正在阅读Meyers编写的“Effective C ++” 并且遇到了“翻译单位”一词。

有人可以给我一个解释:

1)究竟是什么

2)在用C ++编程时,我应该考虑何时使用它

3)如果它只与C ++有关,或者它可以与其他编程语言一起使用

我可能已经在不知道术语的情况下使用它了。

11 个答案:

答案 0 :(得分:238)

来自here :( wayback machine link

  

根据standard C++wayback machine link):   翻译单位是基本单位   用C ++编译。它包括   单个源文件的内容,   加上任何头文件的内容   直接或间接包含在其中,   减去那些被忽略的行   使用条件预处理   语句。

     

单个翻译单元可以   编译成目标文件库,   或可执行程序。

     

翻译单位的概念是   最常在上下文中提到   一个定义规则,和   模板。

答案 1 :(得分:57)

翻译单元用于所有意图和目的的文件(.c / .cpp),完成后包括所有头文件。

http://msdn.microsoft.com/en-us/library/bxss3ska%28VS.80%29.aspx

答案 2 :(得分:26)

一个难以回答的难题。 C ++标准规定:

  

该程序的文本保存在本国际标准中称为源文件的单元中。源文件              连同所有标题(17.4.1.2)和包含的源文件(16.2)通过   预处理指令#include,减去任何跳过的任何源代码行   条件包含(16.1)   预处理指令称为翻译单元。 [注意:一个C ++   程序不一定都要翻译成   同一时间。 ]

因此,对于大多数意图和目的,翻译单元是单个C ++源文件以及它通过预处理器#include机制包含的头文件或其他文件。

关于您的其他问题:

  

2)我什么时候应该考虑使用它   用C ++编程时

你不能不考虑它 - 翻译单元是C ++程序的基础。

  

3)如果它只与C ++有关,或者它   可以与其他编程一起使用   语言

其他语言也有类似的概念,但它们的语义会略有不同。例如,大多数其他语言不使用预处理器。

答案 3 :(得分:8)

这本书很清楚。当Meyer指的是“翻译单元”时,他指的是源代码文件。

答案 4 :(得分:4)

除了ODR之外,翻译单元在未命名命名空间的定义中很重要,它取代了“静态”的旧用法之一。

我想我仍然没有足够的积分在最佳答案下添加评论。

答案 5 :(得分:3)

翻译单元是传递给编译器的代码。这通常意味着在.c文件上运行预处理器的输出。

答案 6 :(得分:2)

C和C ++程序由一个或多个源文件组成,每个源文件都包含一些程序文本。源文件及其包含文件(使用#include预处理程序指令包含的文件)但不包括由条件编译指令(如#if)删除的代码段,称为“转换单元”。

答案 7 :(得分:1)

根据MSDN:C和C ++程序由一个或多个源文件组成,每个源文件都包含一些程序文本。源文件及其包含文件(使用#include预处理程序指令包含的文件)但不包括由条件编译指令(如#if)删除的代码段,称为“转换单元”。

答案 8 :(得分:0)

每个cpp / c(实现)文件都将转换为翻译单元(即目标文件(.obj))cpp文件中的标题将替换为头文件中的实际文本。

答案 9 :(得分:0)

正如其他人所说,翻译单元基本上是预处理后源文件的内容。它是语言语法中最顶级的产品;如果您正在编写C或C ++编译器,则只需要担心它。

答案 10 :(得分:0)

在我看来,“翻译单元”通常是单个“后预处理”源文件。您可以在此MSDN页面上获得更多详细信息。 http://msdn.microsoft.com/en-us/library/bxss3ska(v=vs.80).aspx