我找到了定义WIN32_LEAN_AND_MEAN * 的解释“通过排除一些不常用的API来减少Win32头文件的大小”*。那么WIN32_LEAN_AND_MEAN到底排除了什么呢?我应该关心这个预处理器指令吗?它能加速构建过程吗?我还在一些项目中看到过一个预处理指令,它的名字类似于extra lean,这是另一个我应该知道的深奥的预处理咒语吗?
WIN32_LEAN_AND_MEAN
xmd2e60i1#
根据Windows Dev Center,WIN32_LEAN_AND_MEAN不包括加密、DDE、RPC、Shell和Windows套接字等API。
chhqkbe12#
直接从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's support page:为了加快生成过程,Visual C++和Windows标头提供了以下新定义:
VC_EXTRALEAN WIN32_LEAN_AND_MEAN
可以使用它们来减小Win32头文件的大小。最后,如果你选择使用这些预处理器定义中的任何一个,而你需要的东西丢失了,你可以自己包含特定的头文件。在MSDN中输入你要查找的函数的名称通常会在页面底部产生一个条目,告诉你如果你想使用它,应该包含哪个头文件。
bgtovc5b3#
作为对上述答案以及Windows Dev Center文档中“鹦鹉学舌”的补充,Winsock2.h头文件内部包含Windows. h头文件中的核心元素,因此在Winsock应用程序中Windows. h头文件通常没有#include行。如果Windows. h头文件需要#include行,则应在其前面加上#define WIN32_LEAN_AND_MEAN宏。由于历史原因,Windows. h头文件默认包含Windows套接字1.1的Winsock. h头文件。Winsock. h头文件中的声明将与Windows套接字2.0所需的Winsock2.h头文件中的声明冲突。WIN32_LEAN_AND_MEAN宏防止Windows. h标头中包含Winsock. h。
kzipqqlq4#
这里有一个很好的答案的动机,从雷蒙德陈的博客:https://devblogs.microsoft.com/oldnewthing/20091130-00/?p=15863...定义WIN32_LEAN_AND_MEAN将您带回到16位Windows的理念,即编写基本Windows程序时使用最小的头文件集。这安抚了那些喜欢对头文件进行微观管理的程序员,这是一个很大的帮助,因为在引入该符号时,预编译头文件并不常用。我记得,在50MHz 80486和8MB内存上,切换到WIN32_LEAN_AND_MEAN可以节省每个C文件3秒的编译时间。当你的项目由20个C文件组成时,这相当于节省了整整一分钟。
4条答案
按热度按时间xmd2e60i1#
根据Windows Dev Center,WIN32_LEAN_AND_MEAN不包括加密、DDE、RPC、Shell和Windows套接字等API。
chhqkbe12#
直接从Windows. h头文件:
如果您想知道每个头文件实际上做什么,那么在MSDN库的搜索中键入头文件名通常会生成该头文件中的函数列表。
此外,从Microsoft's support page:
为了加快生成过程,Visual C++和Windows标头提供了以下新定义:
可以使用它们来减小Win32头文件的大小。
最后,如果你选择使用这些预处理器定义中的任何一个,而你需要的东西丢失了,你可以自己包含特定的头文件。在MSDN中输入你要查找的函数的名称通常会在页面底部产生一个条目,告诉你如果你想使用它,应该包含哪个头文件。
bgtovc5b3#
作为对上述答案以及Windows Dev Center文档中“鹦鹉学舌”的补充,
Winsock2.h头文件内部包含Windows. h头文件中的核心元素,因此在Winsock应用程序中Windows. h头文件通常没有#include行。如果Windows. h头文件需要#include行,则应在其前面加上#define WIN32_LEAN_AND_MEAN宏。由于历史原因,Windows. h头文件默认包含Windows套接字1.1的Winsock. h头文件。Winsock. h头文件中的声明将与Windows套接字2.0所需的Winsock2.h头文件中的声明冲突。WIN32_LEAN_AND_MEAN宏防止Windows. h标头中包含Winsock. h。
kzipqqlq4#
这里有一个很好的答案的动机,从雷蒙德陈的博客:https://devblogs.microsoft.com/oldnewthing/20091130-00/?p=15863
...定义WIN32_LEAN_AND_MEAN将您带回到16位Windows的理念,即编写基本Windows程序时使用最小的头文件集。这安抚了那些喜欢对头文件进行微观管理的程序员,这是一个很大的帮助,因为在引入该符号时,预编译头文件并不常用。我记得,在50MHz 80486和8MB内存上,切换到WIN32_LEAN_AND_MEAN可以节省每个C文件3秒的编译时间。当你的项目由20个C文件组成时,这相当于节省了整整一分钟。