C++编译与翻译单元

C++ compilation vs translation unit

本文关键字:单元 翻译 编译 C++      更新时间:2024-05-11

我正在准备一个关于工作模板的简短演示,并将isocpp.org作为内容的起点。然而,我遇到了一个有趣的段落:

专家注意:我显然在上面做了几个简化。这是故意的,所以请不要大声抱怨。如果你知道.cpp文件和编译单元之间的区别,类模板和模板类之间的区别以及模板实际上不仅仅是美化的宏这一事实,那么不要抱怨:这个特定的问题/答案一开始就不是针对你的。我简化了一些事情,这样新手就会"明白",即使这样做冒犯了一些专家。

有几件事让我感到困惑,其中之一是.cpp文件与编译单元。

我已经读到一个单独的.cpp文件被称为";翻译单元";。但究竟什么是汇编单位呢?

我发现这个答案说翻译和编译单位是一样的,基本上只是一个.cpp文件的花哨名称,但isocpp似乎不这么认为,即使我搜索",谷歌也只会对翻译单位做出解释;编译单元";。维基百科似乎提到了";单一编译单元";模型,但没有深入了解什么是实际的编译单元。

那么,什么是编译单元,它与翻译单元有何不同(翻译单元与.cpp文件是否100%相同(?

首先,翻译和编译单元是一回事。单词/短语翻译单位的使用频率高于汇编单位。这基本上意味着你的源文件包括它的所有头文件。

其次我们(我指的是好的C++书(使用术语CCD_ 1或CCD_;模板函数";以及";模板类";。

来自文件

程序的文本以本国际标准中称为源文件的单位保存。源文件以及通过预处理指令包含的所有头文件(17.6.1.2(和源文件(16.2(#include减去任何条件包含(16.1(预处理指令跳过的任何源行,即称为翻译单元

请注意,在同一文档中,他们使用了术语"编译单位"。如果你仔细阅读该文件中"编译单位"一词的用法,你会发现它们的含义与翻译单位相同。

现在要清除一切(从上面(,

  1. 编译单元和翻译单元是一回事
  2. 单独的cpp文件(没有其头(并不构成翻译单元(或编译单元,因为它们的意思相同(。另一方面,包含所有标头的cpp文件确实构成了翻译/编译单元

翻译单元是在CPP文件中包含所有标头的结果,而不仅仅是CPP文件。