我找到了定义WIN32_LEAN_AND_MEAN
“通过排除一些不常用的 API 来减小 Win32 头文件的大小”的解释。我在其他地方读到它加快了构建过程。
那么究竟WIN32_LEAN_AND_MEAN
排除了什么?我应该关心这个预处理器指令吗?它是否加快了构建过程?
我还在项目中看到了一个预处理器指令,命名为额外精益。这是我应该知道的另一个深奥的预处理器咒语吗?
我找到了定义WIN32_LEAN_AND_MEAN
“通过排除一些不常用的 API 来减小 Win32 头文件的大小”的解释。我在其他地方读到它加快了构建过程。
那么究竟WIN32_LEAN_AND_MEAN
排除了什么?我应该关心这个预处理器指令吗?它是否加快了构建过程?
我还在项目中看到了一个预处理器指令,命名为额外精益。这是我应该知道的另一个深奥的预处理器咒语吗?
根据Windows 开发中心,WIN32_LEAN_AND_MEAN 不包括加密、DDE、RPC、Shell 和 Windows 套接字等 API。
直接来自 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 中键入您要使用的函数的名称通常会在页面底部生成一个条目,如果您想使用它,该条目会告诉您要包含哪个标题。
补充上述答案以及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 头文件中。