我知道人们建议在头文件中包含头文件保护,以防止头文件内容被预处理器多次插入源代码文件。
但请考虑以下情况:
假设我有文件main.cpp
,stuff.cpp
和commonheader.h
,.h
文件有它的标题保护。
如果任一.cpp
文件尝试包含commonheader.h
多次,则预处理器将阻止这种情况发生,并且在编译为目标代码后,我们得到,
main.o
只包含一次 commonheader.h 的内容。
stuff.o
只包含一次 commonheader.h 的内容。
请注意,commonheader 的内容已在文件中重复,但不在同一个.o
文件中。
那么在链接步骤中会发生什么?由于 .o 文件被融合到一个可执行文件中,我们必须再次确保commonheader的内容不会重复。编译器会处理这个吗?如果不是,那么当我们处理巨大的头文件时,这不是一个问题,会导致文件之间的代码重复并导致较大的可执行文件大小。
如果我在问题的任何地方都犯了一些概念上的错误,请纠正我。