我正在清理代码,并希望从一些源文件中最小化#includes。
我一直在查看id Softwares Doom 3源代码,并注意到许多文件不包含任何内容,但仍然可以访问其他文件中定义的#defines。
例如,Timer.h没有#includes,因此有权访问ID_INLINE宏。
我比较了.sln,.vcxproj,.vcxproj.filters,.props文件,我几乎与他们相同(减去文件数,文件名等)。
有没有人对如何完成这样的事情有任何想法?
谢谢!
答案 0 :(得分:0)
头文件不是自己编译的;它们被#include到.cpp文件中,并且.cpp文件被编译。因此,头文件X
可以引用在其他头文件Y
(不包括X
)中定义的宏,以及Y
和{ {1}}被包含(按特定顺序)到某个源(.cpp)文件中,然后所有引用都会有效。
在您的情况下,几乎可以肯定的是,在引用诸如X
之类的宏之前,文件sys/sys_public.h
最终会被#include包含在每个文件中。实际上,如果你四处寻找,你会看到ID_INLINE
#include来自sys_public.h
,这是许多.cpp文件中包含的第一个头文件。