我读到 #include 会在 C++ 预处理器编译前将 "file" 复制粘贴到我们的源文件中。这是否意味着 "file" (iostream) 也会随着我们编译源文件而一遍又一遍地被编译?
此外,在 C++ 完成其工作后,中间文件的大小是否还包括 "file" 和源文件大小的字节?
此外,在 C++ 完成其工作后,中间文件的大小是否还包括 "file" 和源文件大小的字节?
#include <file>
会在C++预处理器编译之前将“file”复制并粘贴到我们的源文件中。file
中的数据和您的源文件中的数据。(实际上,现在的真正编译器 tend 进行将 C 预处理器、编译器前端和编译器后端合成为一个单一程序。但这基本上只是一个细节。)#include <iostream>
定义了许多内联函数。任何特定程序仅使用其中很少的几个,因此它们将被省略从编译器输出中去掉。注释(在源文件中使用空间)不会出现在输出中。另一方面,如果您编写了一个复杂的模板,并为几种不同类型进行实例化,则输出将包含每种类型的不同副本,并且可能比输入大得多。关于中间文件大小的问题,是的,它会增加。您可以编写一个简单的 HelloWorld 程序并按以下方式编译它(在Linux中)来检查其大小:
g++ name.cpp -o name --save-temps
"name.ii" (Preprocessed code after including <iostream>
"name.s" (Assembly version of the code)
"name.o" (Object code)
使用以下方法检查文件大小的差异:
ls -l name.cpp name.ii
ios_base::Init
没有必要大于1个字节)。 - Martin Bonner supports Monica没有库(头文件)不会增加文件的大小,因为编译器不会将所有头文件添加到您的代码中。它只会将您在代码中使用的内容添加到您的代码中。
cpp -I /usr/include/ -I. file.cpp -o file.preprocessed它只包含头文件和定义,它们不会增加您最终程序的大小。
g++
)编译器,则可以传递预处理器选项,如-H
(了解实际包含哪些头文件),或者使用-C -E
获取预处理后的形式。 - Basile Starynkevitchiosfwd
,它类似于一个缩小版的iostream
,在您不需要完整的iostream文件的所有细节时非常有用。 - R.M.