【发布时间】:2018-11-30 11:57:44
【问题描述】:
我正在阅读一本名为 jumping into C++ 的书,书中有一部分是这样说的:
比如这样的语句
#include <iostream>
告诉预处理器将文件 iostream 的文本直接抓取到当前文件中。每次包含头文件时,它都会在编译器看到它之前被粘贴到文件中,并且#include 指令将被删除。
因此,我了解到所有文件都粘贴到一个文件中,因此您只剩下一个源文件。但他接着说:
每个源文件都是单独编译的,这意味着目标文件仅包含已编译的源代码文件的机器语言。
这表明源文件在进入编译阶段时仍然是分开的,但我认为所有文件都已粘贴到一个大文件中。有人可以解释一下,是所有文件都粘贴到一个文件中,还是分开后由链接器连接?
【问题讨论】:
-
"所有文件都已粘贴" - 所有包含文件都粘贴到称为翻译单元。具有不同包含文件堆栈的不同源文件将被视为不同的翻译单元。编译每个翻译单元,然后将每个翻译单元生成的目标代码链接在一起以形成您的程序。
-
所以有一个类似于主文件的源文件,你的程序中有多个源文件,每个源文件包含不同的小文件?如果是这样,那么是什么将某些东西定义为源文件而不是包含在源文件中的较小文件?
-
@AmeenIzhac 你所说的部分正确。是的,有一个“大老板”源文件。一个入口点,所有事情都从这里开始。默认情况下它的名字
main.cpp,必须是这个名字,否则编译器不知道要编译什么并且可能有can't find main错误(你可以通过设置来改变它)。我认为您可能需要阅读更多关于 C++ 的内容并查看更多示例。
标签: c++ compilation preprocessor