什么是“翻译单位”?在c++中?

当时我正在阅读《Effective c++ "作者:Scott Meyers 并遇到了术语“翻译单元”。

谁能给我解释一下:

  1. 到底是什么?

  2. 当我用c++编程时,什么时候应该考虑使用它?

  3. 它只与c++有关,还是也可以与其他编程语言一起使用?

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

92542 次浏览

翻译单元是一个文件(.c/.cpp), 它完成了包括所有头文件。

http://web.archive.org/web/20091213073754/http://msdn.microsoft.com/en-us/library/bxss3ska(VS.80).aspx

这本书讲得够清楚了。当Meyers提到“翻译单元”时,他指的是源代码文件。

来自在这里:(Wayback机link)

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

一个翻译单元可以是 编译成一个目标文件,库,

.或可执行程序 翻译单位的概念是 最常在上下文中提到 一个定义规则,和 模板。< / p >

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

每个cpp/c(实现)文件将被转换为一个翻译单元(即。CPP文件中的object file (.obj)头文件将被替换为头文件中的实际文本。

这是一个很难明确回答的问题。c++标准声明:

在本国际标准中,程序的文本以称为源文件的单位保存。源文件 连同所有的头文件(17.4.1.2)和包括的源文件(16.2)通过 预处理指令#include,减少被跳过的任何源行 条件包含(16.1) 预处理指令,称为翻译单元。[注:a c++ 程序不需要全部翻译 同一时间。) < / p >

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

关于你的其他问题:

    我应该什么时候考虑使用它 当用c++编程时

你不能不用它——翻译单元是c++程序的基础。

  1. 如果它只与c++相关,或者它 可以与其他编程一起使用吗 李语言< / >

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

正如其他人所说,翻译单元基本上是源文件经过预处理后的内容。它是语言语法的最高产物;只有在编写C或c++编译器时才需要担心这个问题。

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

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

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

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