web-dev-qa-db-ja.com

#defining WIN32_LEAN_AND_MEANは何を正確に除外しますか?

WIN32_LEAN_AND_MEANを定義する説明で、「あまり頻繁に使用されないAPIを除外することにより、Win32ヘッダーファイルのサイズを削減します」を見つけました。他のどこかで、ビルドプロセスを高速化することを読みました。

それでは、WIN32_LEAN_AND_MEANは正確に何を除外しますか?このプリプロセッサディレクティブを気にする必要がありますか?ビルドプロセスを高速化しますか?

私はまた、余分な無駄のない線に沿って何かという名前のプロジェクトでプリプロセッサディレクティブを見てきました。これは別の難解なプリプロセッサ呪文ですか?

145
fishfood

Windows.hヘッダーファイルから直接:

#ifndef WIN32_LEAN_AND_MEAN
    #include <cderr.h>
    #include <dde.h>
    #include <ddeml.h>
    #include <dlgs.h>
    #ifndef _MAC
        #include <lzexpand.h>
        #include <mmsystem.h>
        #include <nb30.h>
        #include <rpc.h>
    #endif
    #include <shellapi.h>
    #ifndef _MAC
        #include <winperf.h>
        #include <winsock.h>
    #endif
    #ifndef NOCRYPT
        #include <wincrypt.h>
        #include <winefs.h>
        #include <winscard.h>
    #endif

    #ifndef NOGDI
        #ifndef _MAC
            #include <winspool.h>
            #ifdef INC_OLE1
                #include <ole.h>
            #else
                #include <ole2.h>
            #endif /* !INC_OLE1 */
        #endif /* !MAC */
        #include <commdlg.h>
    #endif /* !NOGDI */
#endif /* WIN32_LEAN_AND_MEAN */

各ヘッダーが実際に何をしているのか知りたい場合、ヘッダー名を MSDN ライブラリの検索に入力すると、通常、そのヘッダーファイルの関数のリストが生成されます。

また、 Microsoftのサポートページ から:

ビルドプロセスを高速化するために、Visual C++およびWindowsヘッダーは次の新しい定義を提供します。

VC_EXTRALEAN
WIN32_LEAN_AND_MEAN

これらを使用して、Win32ヘッダーファイルのサイズを縮小できます。

最後に、これらのプリプロセッサのいずれかを使用することを選択し、必要なものが欠落している場合は、その特定のヘッダーファイルを自分でインクルードできます。目的の関数の名前をMSDNに入力すると、通常、ページの下部に、使用する場合に含めるヘッダーを示すエントリが生成されます。

136
bitwise

Windows Dev Center WIN32_LEAN_AND_MEANによると、暗号化、DDE、RPC、シェル、WindowsソケットなどのAPIは除外されます。

99
Chris911