201

我找到了定义WIN32_LEAN_AND_MEAN “通过排除一些不常用的 API 来减小 Win32 头文件的大小”的解释。我在其他地方读到它加快了构建过程。

那么究竟WIN32_LEAN_AND_MEAN排除了什么?我应该关心这个预处理器指令吗?它是否加快了构建过程?

我还在项目中看到了一个预处理器指令,命名为额外精益。这是我应该知道的另一个深奥的预处理器咒语吗?

4

3 回答 3

189

根据Windows 开发中心,WIN32_LEAN_AND_MEAN 不包括加密、DDE、RPC、Shell 和 Windows 套接字等 API。

于 2012-06-14T19:41:35.597 回答
186

直接来自 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 头文件提供了以下新定义:

VC_EXTRALEAN
WIN32_LEAN_AND_MEAN

您可以使用它们来减小 Win32 头文件的大小。

最后,如果您选择使用这些预处理器定义中的任何一个,并且缺少您需要的东西,您可以自己包含那个特定的头文件。在 MSDN 中键入您要使用的函数的名称通常会在页面底部生成一个条目,如果您想使用它,该条目会告诉您要包​​含哪个标题。

于 2012-06-14T19:45:49.603 回答
4

补充上述答案以及Windows Dev Center文档中的“Parroting”,

Winsock2.h 头文件内部包含来自 Windows.h 头文件的核心元素,因此 Winsock 应用程序中的 Windows.h 头文件通常没有#include 行。如果 Windows.h 头文件需要 #include 行,则应以 #define WIN32_LEAN_AND_MEAN 宏开头。由于历史原因,Windows.h 标头默认包含 Windows Sockets 1.1 的 Winsock.h 标头文件。Winsock.h 头文件中的声明将与 Windows Sockets 2.0 所需的 Winsock2.h 头文件中的声明冲突。WIN32_LEAN_AND_MEAN 宏防止 Winsock.h 被包含在 Windows.h 头文件中。

于 2021-01-21T16:22:32.170 回答