1

私はコードをクリーンアップしている最中であり、いくつかのソースファイルからの#includesを最小限に抑えたいと思っています。

id Softwares Doom 3のソースコードを調べていたところ、多くのファイルに何も含まれていないにもかかわらず、他のファイルで定義されている#definesにアクセスできることに気付きました。

たとえば、Timer.hには、ID_INLINEマクロにアクセスできる#includeがありません。

.sln、.vcxproj、.vcxproj.filters、.propsファイルを比較しましたが、それらのファイルとほぼ同じです(ファイル数、ファイル名などを差し引いたもの)。

誰かがこのようなことを達成する方法について何かアイデアがありますか?

ありがとう!

4

1 に答える 1

0

ヘッダー ファイル自体はコンパイルされません。それらは .cpp ファイルに #include され、.cpp ファイルはコンパイルされます。そのため、ヘッダー ファイルXが他のヘッダー ファイルY(含まれていない) で定義されているマクロを参照することが可能であり、とのX両方が (特定の順序で) ソース (.cpp) ファイルに含まれている場合、すべての参照うまくいくでしょう。YX

あなたの場合、ほぼ確実に起こっていることは、sys/sys_public.hマクロのようなものID_INLINEが参照される前に、ファイルが最終的にすべてのファイルに #include されることです。実際、grepすると、多くの .cpp ファイルに含まれる最初のヘッダー ファイルであるsys_public.h#included fromであることがわかります。precompiled.h

于 2013-01-21T03:23:05.930 に答える