我正在阅读Meyers编写的“Effective C ++” 并且遇到了“翻译单位”一词。
有人可以给我一个解释:
1)究竟是什么
2)在用C ++编程时,我应该考虑何时使用它
3)如果它只与C ++有关,或者它可以与其他编程语言一起使用
我可能已经在不知道术语的情况下使用它了。
答案 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