#Defining WIN32_LEAN_AND_MESE loại trừ chính xác điều gì?


165

Tôi đã tìm thấy lời giải thích xác định WIN32_LEAN_AND_MESE "giảm kích thước của tệp tiêu đề Win32 bằng cách loại trừ một số API ít được sử dụng hơn". Ở một nơi khác tôi đọc rằng nó tăng tốc quá trình xây dựng.

Vậy WIN32_LEAN_AND_MESE loại trừ chính xác những gì? Tôi có nên quan tâm đến chỉ thị tiền xử lý này? Liệu nó có tăng tốc quá trình xây dựng?

Tôi cũng đã thấy một chỉ thị tiền xử lý trong các dự án được đặt tên theo một cái gì đó dọc theo dòng nạc thêm. Đây có phải là một câu thần chú tiền xử lý bí truyền khác mà tôi nên biết về?

Câu trả lời:


158

Trực tiếp từ tệp tiêu đề 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 */

nếu bạn muốn biết mỗi tiêu đề thực sự làm gì, việc nhập tên tiêu đề vào tìm kiếm trong thư viện MSDN thường sẽ tạo ra một danh sách các hàm trong tệp tiêu đề đó.

Ngoài ra, từ trang hỗ trợ của Microsoft :

Để tăng tốc quá trình xây dựng, Visual C ++ và Windows Headers cung cấp định nghĩa mới sau đây:

VC_EXTRALEAN
WIN32_LEAN_AND_MESE

Bạn có thể sử dụng chúng để giảm kích thước của tệp tiêu đề Win32.

Cuối cùng, nếu bạn chọn sử dụng một trong hai định nghĩa tiền xử lý này và thiếu thứ gì đó bạn cần, bạn có thể tự bao gồm tệp tiêu đề cụ thể đó. Nhập tên của chức năng mà bạn theo sau vào MSDN thường sẽ tạo ra một mục sẽ cho bạn biết tiêu đề nào sẽ bao gồm nếu bạn muốn sử dụng nó, ở cuối trang.


140

Theo Trung tâm Dev của Windows WIN32_LEAN_AND_MESE loại trừ các API như Mật mã, DDE, RPC, Shell và Ổ cắm Windows.


30
Tôi nghĩ rằng đây là câu trả lời ngắn gọn mà hầu hết chúng ta đang tìm kiếm.
Dave Voyles

3
@ DaveVoyles-MSFT và thậm chí nó không làm trầy xước bề mặt. Ví dụ: nếu bạn muốn sử dụng, winsock2.htốt hơn WIN32_LEAN_AND_MEAN đảm bảo luôn được xác định bởi vì nếu không, bạn sẽ nhận được các khai báo mâu thuẫn giữa các phiên bản WinSock. Vì vậy, tôi thích câu trả lời khác tốt hơn, bởi vì nó thêm chi tiết bị thiếu ở đây. Đáng chú ý là nó cho thấy hiệu quả thực sự của định nghĩa đó là gì. Cả hai câu trả lời tài liệu vẹt và một câu hỏi khác là toàn diện hơn, mặc dù cả hai đều không đề cập đến "hậu quả" của việc không sử dụng định nghĩa (đụng độ tên WinSock, v.v.).
0xC0000022L
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.