【发布时间】:2013-05-31 06:42:33
【问题描述】:
如果同一个头文件包含在一个c++程序的多个源文件中,那么它对编译有什么影响(尤其是g++)?
编译器是否只加载一次头文件并为每个包含头文件的源文件编译它,或者头文件将为包含它的每个源文件单独加载。
【问题讨论】:
-
如何加载头文件,AFAIK,未在 C++ 编译模型中指定。实现可以选择加载一次,按需加载(针对每个源文件),或者以我有限的大脑无法想象的其他奇怪方式加载它。
-
基本上
#include *.h表示“替换”此处 *.h 文件中的所有文本 -
从概念上讲,您编译的每个文件都会重新审视标题。实际上,您的编译器很有可能支持某种形式的预编译头文件,因此它将源代码编译为某种中间形式,然后在编译包含相同头文件的其他文件时使用它。
-
g++ 编译器是否有可能被优化为即使从不同的源文件多次调用也只加载一次头文件?请确认。
-
@birajbora 绝对可以。预编译的头文件很常见,不必在单个进程中存储在内存中。它们可以很容易地写入磁盘并供后续进程使用。