#defining WIN32_LEAN_AND_MEAN에서 정확히 제외하는 것은 무엇입니까?


165

WIN32_LEAN_AND_MEAN을 정의하는 설명에서 "빈도가 적은 API를 제외하여 Win32 헤더 파일의 크기가 줄어 듭니다"라는 것을 알았습니다. 다른 곳에서는 빌드 프로세스 속도가 빨라진다는 것을 읽었습니다.

그렇다면 WIN32_LEAN_AND_MEAN은 정확히 무엇을 배제합니까? 이 전 처리기 지시문에주의해야합니까? 빌드 프로세스가 빨라 집니까?

또한 여분의 린 라인을 따라 명명 된 프로젝트에서 전 처리기 지시문을 보았습니다. 이것이 내가 알아야 할 또 다른 난해한 전 처리기 주문입니까?

답변:


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 라이브러리 의 검색에 헤더 이름을 입력 하면 일반적으로 해당 헤더 파일의 함수 목록이 생성됩니다.

또한,에서 마이크로 소프트의 지원 페이지 :

빌드 프로세스 속도를 높이기 위해 Visual C ++ 및 Windows 헤더는 다음과 같은 새로운 정의를 제공합니다.

VC_EXTRALEAN
WIN32_LEAN_AND_MEAN

이를 사용하여 Win32 헤더 파일의 크기를 줄일 수 있습니다.

마지막으로, 이러한 전 처리기 정의 중 하나를 사용하기로 선택했는데 필요한 것이 누락 된 경우 해당 헤더 파일을 직접 포함시킬 수 있습니다. MSDN에 함수 이름을 입력하면 일반적으로 페이지 하단에 사용하려는 헤더를 포함하는 항목이 생성됩니다.


140

Windows Dev Center 에 따르면 WIN32_LEAN_AND_MEAN은 암호화, DDE, RPC, 셸 및 Windows 소켓과 같은 API를 제외합니다.


30
나는 이것이 우리 대부분이 간결한 대답이라고 생각합니다.
Dave Voyles

3
@ DaveVoyles-MSFT는 아직 표면을 긁지 않습니다. 예를 들어, 사용하려는 경우 WinSock 버전간에 충돌하는 선언이 표시되므로 항상winsock2.h 더 잘 정의 해야 합니다. 그래서 나는 여기에 빠진 세부 사항을 추가하기 때문에 다른 대답이 더 좋습니다. 특히 그것은 그 정의의 실제 효과가 무엇인지 보여줍니다. 둘 다 앵무새 문서에 대한 답변을 제공하지만 다른 하나는 더 포괄적입니다. 비록 둘 다 define (WinSock 이름 충돌 등)을 사용하지 않는다는 "반향"에 대해서는 언급하지 않습니다. WIN32_LEAN_AND_MEAN
0xC0000022L
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.