Cosa esclude esattamente #defining WIN32_LEAN_AND_MEAN?


165

Ho trovato la spiegazione che definisce WIN32_LEAN_AND_MEAN "riduce la dimensione dei file di intestazione Win32 escludendo alcune delle API utilizzate meno frequentemente". Da qualche altra parte ho letto che accelera il processo di compilazione.

Cosa esclude esattamente WIN32_LEAN_AND_MEAN? Dovrei preoccuparmi di questa direttiva pre-processore? Accelera il processo di compilazione?

Ho anche visto una direttiva preprocessore in progetti denominati qualcosa sulla falsariga di extra lean. È un altro incantesimo esoterico del preprocessore che dovrei conoscere?

Risposte:


158

Direttamente dal file di intestazione di 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 */

se si desidera sapere che cosa effettivamente fanno le intestazioni, digitando i nomi delle intestazioni nella ricerca nella libreria MSDN si produrrà di solito un elenco delle funzioni in quel file di intestazione.

Inoltre, dalla pagina di supporto di Microsoft :

Per accelerare il processo di compilazione, Visual C ++ e le intestazioni di Windows forniscono le seguenti nuove definizioni:

VC_EXTRALEAN
WIN32_LEAN_AND_MEAN

È possibile utilizzarli per ridurre la dimensione dei file di intestazione Win32.

Infine, se scegli di utilizzare uno di questi preprocessori definiti e manca qualcosa di cui hai bisogno, puoi semplicemente includere tu stesso quel file di intestazione specifico. Digitare il nome della funzione che stai cercando in MSDN di solito produrrà una voce che ti dirà quale intestazione includere se vuoi usarla, in fondo alla pagina.


140

Secondo Windows Dev Center WIN32_LEAN_AND_MEAN esclude API come crittografia, DDE, RPC, Shell e Windows Socket.


30
Penso che questa sia la risposta sintetica che molti di noi stavano cercando.
Dave Voyles,

3
@ DaveVoyles-MSFT e tuttavia non graffia nemmeno la superficie. Ad esempio, se si desidera utilizzarlo winsock2.hmeglio assicurarsi che WIN32_LEAN_AND_MEAN sia sempre definito perché altrimenti si otterranno dichiarazioni contrastanti tra le versioni di WinSock. Quindi mi piace di più l'altra risposta, perché aggiunge dettagli mancanti qui. In particolare mostra qual è l'effetto reale di tale definizione. Entrambe rispondono alla documentazione dei pappagalli e tuttavia l'altra è più completa, anche se entrambe non menzionano le "ripercussioni" del non usare la definizione (scontro di nomi WinSock ecc.).
0xC0000022L
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.