C++ 编译与翻译单元
C++ compilation vs translation unit
我正在准备一个关于工作模板的简短演示,并使用 isocpp.org 作为内容的起点。但是,我遇到了一个有趣的段落:
A note to the experts: I have obviously made several simplifications above. This was intentional so please don’t complain too loudly. If you know the difference between a .cpp file and a compilation unit, the difference between a class template and a template class, and the fact that templates really aren’t just glorified macros, then don’t complain: this particular question/answer wasn’t aimed at you to begin with. I simplified things so newbies would “get it,” even if doing so offends some experts.
有几件事让我感到困惑,其中之一是 .cpp 文件与编译单元。
我了解到单个 .cpp 文件称为“翻译单元”。但编译单元到底是什么?
我发现 的回答说翻译和编译单元是一回事,基本上只是单个 .cpp 文件的奇特名称,但 isocpp 似乎不这么认为,并且 google 只有即使我搜索“编译单元”,也会对翻译单元进行解释。维基百科似乎提到了“单一编译单元”模型,但没有说明什么是编译单元。
那么什么是编译单元,它与翻译单元有何不同(翻译单元与 .cpp 文件是否 100% 相同)?
翻译单元是在 CPP 文件中包含所有 headers 的结果 - 而不是单独的 CPP 文件。
首先,翻译和编译单位是一回事。 word/phrase 翻译单元比编译单元更常用。这基本上意味着您的源文件包括所有 header 个文件。
其次 我们(我指的是优秀的 C++ 书籍)使用术语 function template
或 class template
而不是使用术语“模板函数”和“模板 class”。
The text of the program is kept in units called source files in this International Standard. A source file
together with all the headers (17.6.1.2) and source files included (16.2) via the preprocessing directive
#include, less any source lines skipped by any of the conditional inclusion (16.1) preprocessing directives, is
called a translation unit
另请注意,在同一文档中,他们使用了术语编译单元。如果您仔细阅读该文档中编译单元一词的用法,您会发现它们与翻译单元的含义相同。
现在(从上方)清理所有内容,
- 汇编和翻译单元是一回事。
- 一个单独的cpp文件(没有它的headers)不构成一个翻译单元(或编译单元,因为他们的意思是一样的)。另一方面,包含所有 header 的 cpp 文件 构成 一个 translation/compilation 单元。
我正在准备一个关于工作模板的简短演示,并使用 isocpp.org 作为内容的起点。但是,我遇到了一个有趣的段落:
A note to the experts: I have obviously made several simplifications above. This was intentional so please don’t complain too loudly. If you know the difference between a .cpp file and a compilation unit, the difference between a class template and a template class, and the fact that templates really aren’t just glorified macros, then don’t complain: this particular question/answer wasn’t aimed at you to begin with. I simplified things so newbies would “get it,” even if doing so offends some experts.
有几件事让我感到困惑,其中之一是 .cpp 文件与编译单元。
我了解到单个 .cpp 文件称为“翻译单元”。但编译单元到底是什么?
我发现
那么什么是编译单元,它与翻译单元有何不同(翻译单元与 .cpp 文件是否 100% 相同)?
翻译单元是在 CPP 文件中包含所有 headers 的结果 - 而不是单独的 CPP 文件。
首先,翻译和编译单位是一回事。 word/phrase 翻译单元比编译单元更常用。这基本上意味着您的源文件包括所有 header 个文件。
其次 我们(我指的是优秀的 C++ 书籍)使用术语 function template
或 class template
而不是使用术语“模板函数”和“模板 class”。
The text of the program is kept in units called source files in this International Standard. A source file together with all the headers (17.6.1.2) and source files included (16.2) via the preprocessing directive #include, less any source lines skipped by any of the conditional inclusion (16.1) preprocessing directives, is called a translation unit
另请注意,在同一文档中,他们使用了术语编译单元。如果您仔细阅读该文档中编译单元一词的用法,您会发现它们与翻译单元的含义相同。
现在(从上方)清理所有内容,
- 汇编和翻译单元是一回事。
- 一个单独的cpp文件(没有它的headers)不构成一个翻译单元(或编译单元,因为他们的意思是一样的)。另一方面,包含所有 header 的 cpp 文件 构成 一个 translation/compilation 单元。