在C++和C中,翻译单元的定义有所不同吗?
在其他文章中,我看到一个头文件和源代码文件组成了一个翻译单元,但是在C++中,如果一个源代码文件包含了所有定义,它可以被称为一个翻译单元吗?
在其他文章中,我看到一个头文件和源代码文件组成了一个翻译单元,但是在C++中,如果一个源代码文件包含了所有定义,它可以被称为一个翻译单元吗?
一个翻译单元并不是指“一个头文件和一个源文件”,它可以包含数千个头文件(以及数千个源文件)。
一个翻译单元就是在预处理后通常被称为“源文件”或“.cpp文件”的东西。如果源文件#include
其他文件,那么这些文件的文本将由预处理器包括在翻译单元中。在这个问题上,C和C++没有任何区别。
.cpp
文件中而不是使用.h
文件来放置类声明,那么我可以称呼那个.cpp
文件为翻译单元吗? - user103214#include
机制允许你只需编写一次,编译器就可以帮你复制它:这只是代码组织的问题,与翻译单元的概念没有太大关系。 - Matthieu M.#include
。不过这并不是一个好主意。 - R. Martinho Fernandes在预处理期间,头文件被添加到.cpp文件中,因此编译器基本上是在处理一个包含.cpp和所有通过"#include"添加的.h的大块代码。
这就是翻译单元。
这取决于你所说的“差异”是什么意思。C和C++都定义了类似的概念:基本上,编译源文件时编译的所有内容(包括所有包含的头文件、扩展的宏等)。但在这两种语言中,这并不是同一件事情;例如,像模板这样的东西意味着翻译单元在C++中的行为与C中不同。(例如,C++有一个定义规则。)
翻译单元实际上是在源文件和头文件经过预处理(使用头文件扩展源代码)和预编译后得到的结果。编译器使用翻译单元来生成您在编译器输出目录中看到的 .obj 文件。
编译器看到并翻译为一组的源文件