请问有人能给我解释一下以下问题吗:
1. 它到底是什么? 2. 在使用C++编程时,何时应该考虑使用它? 3. 它只能用于C++,还是可以用于其他编程语言?
也许我已经在使用它,只是不知道这个术语而已...
来自这里:(wayback machine链接)
根据C++标准 (wayback machine链接): 翻译单元是C++中编译的基本单位。它由单个源文件的内容以及直接或间接包含在其中的任何头文件的内容组成,减去使用条件预处理语句忽略的那些行。
单个翻译单元可以编译为对象文件、库或可执行程序。
翻译单元的概念在一些场景中被经常提到,例如一次定义规则和模板。
-fdump-lang-raw
选项,但最近已被删除。其他编译器/工具也有类似的选项: https://stackoverflow.com/q/39140779/159145 - Dai翻译单元实际上是一个文件(.c/.cpp),在它包含所有的头文件之后。
这是一个难以明确回答的问题。C++标准规定:
程序文本在国际标准中被称为源文件,由多个单元组成。一个源文件与所有头文件(17.4.1.2)和通过预处理指令 #include 包含的源文件(16.2)一起,减去任何条件包含(16.1)预处理指令跳过的源代码行,称为一个翻译单元。[注意:C++程序不需要同时全部翻译。]
因此,对于大多数目的而言,翻译单元是一个单独的C++源文件和它通过预处理器 #include 机制包含的头文件或其他文件。
关于您的其他问题:
- 在使用C++编程时应该考虑什么时候使用它?
你不能不使用它——翻译单元是C++程序的基础。
- 它只与C++相关,还是可以与其他编程语言一起使用?
其他编程语言也有类似的概念,但它们的语义会略有不同。例如,大多数其他语言不使用预处理器。
这本书已经讲得很清楚了。当Meyers提到“翻译单元”时,他指的是源代码文件。
翻译单元是传递给编译器的代码。通常,这意味着在.c文件上运行预处理器后的输出。
C和C++程序由一个或多个源文件组成,每个源文件包含程序的一部分文本内容。一个源文件与它的包含文件(使用#include预处理器指令包含的文件),但不包括被条件编译指令(如#if)移除的代码部分,被称为“翻译单元”。
正如其他人所说,翻译单元基本上是预处理后源文件的内容。它是语言语法中最顶层的产物;只有在编写C或C++编译器时才需要担心它。