#defining WIN32_LEAN_AND_MEAN ยกเว้นอะไรกันแน่


165

ฉันพบคำอธิบายการกำหนด WIN32_LEAN_AND_MEAN "ลดขนาดของไฟล์ส่วนหัวของ Win32 โดยไม่รวม API ที่ใช้งานน้อย" ที่อื่นฉันอ่านว่ามันเร่งกระบวนการสร้าง

ดังนั้น WIN32_LEAN_AND_MEAN ยกเว้นอะไรกันแน่ ฉันควรใส่ใจกับคำสั่งของโปรเซสเซอร์ล่วงหน้าหรือไม่ มันเร็วขึ้นในกระบวนการสร้างหรือไม่?

ฉันยังได้เห็นคำสั่ง preprocessor ในโครงการตั้งชื่อบางอย่างตามแนวของลีนเสริม นี่เป็นคาถา preprocessor ลึกลับอื่นที่ฉันควรรู้เกี่ยวกับ?

คำตอบ:


158

โดยตรงจากไฟล์ส่วนหัวของ 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 Headers จะให้นิยามใหม่ดังต่อไปนี้:

VC_EXTRALEAN
WIN32_LEAN_AND_MEAN

คุณสามารถใช้มันเพื่อลดขนาดของไฟล์ส่วนหัวของ Win32

สุดท้ายหากคุณเลือกที่จะใช้ตัวกำหนดพรีโปรเซสเซอร์อย่างใดอย่างหนึ่งเหล่านี้และสิ่งที่คุณต้องการขาดหายไปคุณสามารถรวมไฟล์ส่วนหัวนั้นด้วยตัวคุณเอง การพิมพ์ชื่อฟังก์ชั่นที่คุณใช้หลังจากเข้าสู่ MSDN จะสร้างรายการที่จะบอกคุณว่าจะรวมส่วนหัวใดถ้าคุณต้องการใช้ที่ด้านล่างของหน้า


140

ตามไปที่Windows Dev Center WIN32_LEAN_AND_MEAN ไม่รวม API เช่นการเข้ารหัส, DDE, RPC, Shell และ Windows Sockets


30
ฉันคิดว่านี่เป็นคำตอบสั้น ๆ ที่พวกเราส่วนใหญ่มองหา
Dave Voyles

3
@ DaveVoyles-MSFT แต่ก็ไม่ได้ทำให้พื้นผิวเป็นรอย ตัวอย่างเช่นหากคุณต้องการใช้winsock2.hคุณควรตรวจสอบให้แน่ใจว่าWIN32_LEAN_AND_MEAN ได้กำหนดไว้เสมอเพราะไม่เช่นนั้นคุณจะได้รับการประกาศที่ขัดแย้งกันระหว่างเวอร์ชั่น WinSock ดังนั้นฉันชอบคำตอบอื่น ๆ ที่ดีกว่าเพราะมันเพิ่มรายละเอียดที่ขาดหายไปที่นี่ โดยเฉพาะอย่างยิ่งมันแสดงให้เห็นว่าอะไรคือผลกระทบที่แท้จริงของการกำหนดนั้น ทั้งสองตอบเอกสารประกอบของนกแก้วและอีกคำถามหนึ่งนั้นมีความครอบคลุมมากกว่าแม้ว่าทั้งสองจะไม่พูดถึง "ผลสะท้อน" ที่ไม่ได้ใช้ define (WinSock name clashes เป็นต้น)
0xC0000022L
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.