我正在清理代码并希望从一些源文件中最小化#includes。
我一直在查看 id Softwares Doom 3 源代码,并注意到许多文件不包含任何内容,但仍然可以访问其他文件中定义的#defines。
例如,Timer.h 没有 #includes 什么也可以访问 ID_INLINE 宏。
我比较了 .sln、.vcxproj、.vcxproj.filters、.props 文件,我与他们的文件几乎相同(减去文件数、文件名等)。
有没有人对如何完成这样的事情有任何想法?
谢谢!
我正在清理代码并希望从一些源文件中最小化#includes。
我一直在查看 id Softwares Doom 3 源代码,并注意到许多文件不包含任何内容,但仍然可以访问其他文件中定义的#defines。
例如,Timer.h 没有 #includes 什么也可以访问 ID_INLINE 宏。
我比较了 .sln、.vcxproj、.vcxproj.filters、.props 文件,我与他们的文件几乎相同(减去文件数、文件名等)。
有没有人对如何完成这样的事情有任何想法?
谢谢!
头文件不是自己编译的;它们#included 到 .cpp 文件中,并且 .cpp 文件被编译。因此,头文件X
可以引用在其他头文件Y
(不包括X
)中定义的宏,并且当两者Y
和X
(按特定顺序)包含到某个源(.cpp)文件中时,所有引用会解决的。
在您的情况下,几乎可以肯定的是,在引用sys/sys_public.h
宏之类的宏之前,该文件最终会在每个文件中#included 。ID_INLINE
事实上,如果你用 grep 搜索,你会看到sys_public.h
#included from precompiled.h
,这是许多 .cpp 文件中包含的第一个头文件。