fis*_*ood 148 windows visual-c++
我发现定义WIN32_LEAN_AND_MEAN的解释"通过排除一些不太常用的API来减小Win32头文件的大小".在其他地方,我读到它可以加快构建过程.
那么WIN32_LEAN_AND_MEAN究竟排除了什么?我应该关心这个预处理器指令吗?它是否加快了构建过程?
我还在项目中看到了一个预处理器指令,其名称与额外精益有关.这是我应该知道的另一个深奥的预处理器咒语吗?
bit*_*ise 140
直接来自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 */
Run Code Online (Sandbox Code Playgroud)
如果你想知道每个标题实际上做了什么,在MSDN库中的搜索中键入标题名称通常会产生该标题文件中的函数列表.
此外,从Microsoft的支持页面:
为了加快构建过程,Visual C++和Windows标头提供了以下新定义:
VC_EXTRALEAN
WIN32_LEAN_AND_MEAN您可以使用它们来减小Win32头文件的大小.
最后,如果您选择使用这些预处理器中的任何一个,并且缺少所需的内容,则可以自己包含该特定的头文件.在MSDN中键入您之后的函数名称通常会生成一个条目,该条目将告诉您在页面底部要使用哪个标题.
Chr*_*911 108
根据Windows开发人员中心, WIN32_LEAN_AND_MEAN排除了诸如加密,DDE,RPC,Shell和Windows套接字之类的API.
小智 10
补充上述答案以及Windows 开发中心文档中的“鹦鹉学舌”,
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 标头中。
小智 9
Raymond Chen 的博客对此动机给出了一个很好的答案:\n https://devblogs.microsoft.com/oldnewthing/20091130-00/?p=15863
\n\n\n...定义 WIN32_LEAN_AND_MEAN 让您回到 16 位 Windows 哲学,即用于编写基本 Windows 程序的最小头文件集。这安抚了那些喜欢对头文件进行微观管理的程序员,这是一个很大的帮助,因为在引入该符号时,预编译头文件并不常用。我记得,在具有 8MB 内存的 50MHz 80486 上,切换到 WIN32_LEAN_AND_MEAN 可以将每个 C 文件的编译时间缩短三秒。当您的项目由 20 个 C 文件组成时,\xe2\x80\x99 就在那里节省了整整一分钟。
\n
| 归档时间: |
|
| 查看次数: |
88691 次 |
| 最近记录: |