Qu'est-ce que #defining WIN32_LEAN_AND_MEAN exclut exactement?

165

J'ai trouvé l'explication définissant WIN32_LEAN_AND_MEAN "réduit la taille des fichiers d'en-tête Win32 en excluant certaines des API les moins fréquemment utilisées". Ailleurs, j'ai lu que cela accélérait le processus de construction.

Alors qu'est-ce que WIN32_LEAN_AND_MEAN exclut exactement? Dois-je me soucier de cette directive pré-processeur? Accélère-t-il le processus de construction?

J'ai également vu une directive de préprocesseur dans des projets nommée quelque chose du genre extra lean. Est-ce une autre incantation de préprocesseur ésotérique que je devrais connaître?

la nourriture pour poissons
la source

Réponses:

158

Directement à partir du fichier d'en-tête 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 */

si vous voulez savoir ce que font réellement chacun des en-têtes, la saisie des noms d'en-tête dans la recherche dans la bibliothèque MSDN produira généralement une liste des fonctions dans ce fichier d'en-tête.

Aussi, à partir de la page de support de Microsoft :

Pour accélérer le processus de génération, Visual C ++ et les en-têtes Windows fournissent les nouvelles définitions suivantes:

VC_EXTRALEAN
WIN32_LEAN_AND_MEAN

Vous pouvez les utiliser pour réduire la taille des fichiers d'en-tête Win32.

Enfin, si vous choisissez d'utiliser l'une ou l'autre de ces définitions de préprocesseur et que quelque chose dont vous avez besoin manque, vous pouvez simplement inclure vous-même ce fichier d'en-tête spécifique. Taper le nom de la fonction que vous recherchez dans MSDN produira généralement une entrée qui vous indiquera quel en-tête inclure si vous souhaitez l'utiliser, en bas de la page.

CurieuxGeorge
la source
140

Selon le centre de développement Windows, WIN32_LEAN_AND_MEAN exclut les API telles que la cryptographie, DDE, RPC, Shell et Windows Sockets.

Chris911
la source
30
Je pense que c'est la réponse succincte que la plupart d'entre nous recherchaient.
Dave Voyles
3
@ DaveVoyles-MSFT et pourtant il n'égratigne même pas la surface. Par exemple, si vous voulez winsock2.hmieux vous utiliser, assurez-vous qu'il WIN32_LEAN_AND_MEAN est toujours défini car sinon, vous obtiendrez des déclarations conflictuelles entre les versions de WinSock. Donc j'aime mieux l'autre réponse, car elle ajoute des détails manquants ici. Cela montre notamment quel est l'effet réel de cette définition. Les deux réponses parrot documentation et pourtant l'autre est plus complète, même si les deux omettent de mentionner les «répercussions» de ne pas utiliser le définir (conflit de noms WinSock, etc.).
0xC0000022L