C和C ++中的翻译单元

C ++和C中的翻译单元之间有区别吗?

在其他post中,我读到标题和源文件构成了一个翻译单元,但是单独的源文件可以在C ++中被称为翻译单元,其中它包含一个文件中的所有定义吗?

翻译单元不是“标题和源文件”。 它可能包括一千个头文件(以及一千个源文件)。

翻译单元是预处理后通常称为“源文件”或“.cpp文件”的单元。 如果源文件#include s其他文件,则预处理器将这些文件的文本包含在翻译单元中。 在这个问题上,C和C ++之间没有区别。

在预处理时将标题添加到.cpp文件中,因此编译器基本上处理大量代码,包含.cpp和“#include”添加的所有.h。

那是翻译单位。

这取决于你所说的“差异”。 C和C ++都类似地定义它:基本上,在编译源文件时编译的所有内容(因此,所有包含的头,扩展的宏等)。 但这两种语言不一样; 像模板这样的东西意味着翻译单元在C ++中的行为与在C中的行为不同。(例如,C ++有一个定义规则。)

翻译单元实际上是源文件和头文件通过预处理(使用头文件扩展源代码)和预编译后获得的。 编译器使用转换单元生成您在编译器输出目录中看到的.obj文件。

编译器看到的源文件集并作为一个单元进行翻译