C++ 翻译单元vs编译单元vs目标文件vs可执行文件vs。。。。在C++;

C++ 翻译单元vs编译单元vs目标文件vs可执行文件vs。。。。在C++;,c++,compilation,executable,object-files,translation-unit,C++,Compilation,Executable,Object Files,Translation Unit,我找不到翻译单元、编译单元、对象文件、可执行文件之间的区别……在许多地方,我看到一个被使用,而不是另一个 我知道这些文件是在C++程序编译和链接过程中生成的。有人能列出在这些过程中生成的所有文件并指定它们之间的差异吗?翻译单元与编译单元相同(因此您的源文件及其包含的所有头文件) 在典型情况下,对象文件是编译单元编译的结果 可执行文件是链接项目的目标文件和运行时库函数的结果 编译过程中实际生成的文件具体取决于编译器,但大多数现代编译器只需读取源文件和头文件,然后生成目标文件,如果只有一个源文件,则

我找不到翻译单元、编译单元、对象文件、可执行文件之间的区别……在许多地方,我看到一个被使用,而不是另一个


我知道这些文件是在C++程序编译和链接过程中生成的。有人能列出在这些过程中生成的所有文件并指定它们之间的差异吗?

翻译单元与编译单元相同(因此您的源文件及其包含的所有头文件)

在典型情况下,对象文件是编译单元编译的结果

可执行文件是链接项目的目标文件和运行时库函数的结果

编译过程中实际生成的文件具体取决于编译器,但大多数现代编译器只需读取源文件和头文件,然后生成目标文件,如果只有一个源文件,则直接将其传递给链接器。这将生成可执行文件

较旧的编译器会将“预处理”作为一个单独的步骤,因此最终会将所有编译单元保存在一个临时文件中。类似地,在过去,不是在目标文件中生成机器代码,而是由编译器输出汇编代码,然后通过汇编程序进行汇编,这将生成目标文件。链接仍然相似

注意,这只是实践,C或C++标准中没有关于可执行文件或对象文件的内容。由编译器实现以他们喜欢的任何方式解决这些问题