1

我正在清理代码并希望从一些源文件中最小化#includes。

我一直在查看 id Softwares Doom 3 源代码,并注意到许多文件不包含任何内容,但仍然可以访问其他文件中定义的#defines。

例如,Timer.h 没有 #includes 什么也可以访问 ID_INLINE 宏。

我比较了 .sln、.vcxproj、.vcxproj.filters、.props 文件,我与他们的文件几乎相同(减去文件数、文件名等)。

有没有人对如何完成这样的事情有任何想法?

谢谢!

4

1 回答 1

0

头文件不是自己编译的;它们#included 到 .cpp 文件中,并且 .cpp 文件被编译。因此,头文件X可以引用在其他头文件Y(不包括X)中定义的宏,并且当两者YX(按特定顺序)包含到某个源(.cpp)文件中时,所有引用会解决的。

在您的情况下,几乎可以肯定的是,在引用sys/sys_public.h宏之类的宏之前,该文件最终会在每个文件中#included 。ID_INLINE事实上,如果你用 grep 搜索,你会看到sys_public.h#included from precompiled.h,这是许多 .cpp 文件中包含的第一个头文件。

于 2013-01-21T03:23:05.930 回答