添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
人们普遍认为 #include <Windows.h> #include <bits/stdc++.h> 头文件一样不好。 在本文中,您将了解 Windows.h 有用性背后的真相,以及它在 C++ 中是好是坏。

因为 windows.h 包含/解析每个标准头(其中大多数是不必要的且不可移植的),并且在与 using namespace std; 结合使用时甚至更多,所以它在 C++ 程序的命名空间中具有大量通用名称,如 next ,这让您无法 低效地使用其他功能。

然而,即使它的执行与bits/stdc++.h相同并使用命名空间std,这也是Win32程序的主要要求; 合并。

在C++程序中定义NOMINMAX以增强Windows.h的有效性 与 windows.h 相关的 MSDN 文档明确定义了要包含哪些头文件来执行特定功能。 仅当您在通过宏包含它之前禁用其不必要的功能时,才包含 windows.h 并不是一个坏习惯。

在 C++ 程序中包含 windows.h 之前定义 NOMINMAX,否则,您将可以访问将与 std::min 和 std::max 交互的 min 和 max 宏。

windows.h 是特定于操作系统的标头,并随 WSDK(Windows 软件开发工具包)一起提供。

建议使用它来增加 Windows 下 #include 指令的实用性; 然而,对于入门级或中级 C++ 开发人员来说,它可能极其复杂,因此他们应该使用 windows.h。

一般来说,在任何以函数为目的的情况下都不要使用 windows.h,因为在 C++ 中良好编程的关键是永远不要使用宏来代替函数。

// operating system (OS) specific # define NOMINMAX // minimize the `windows.h` library # include <Windows.h> # include <iostream> // for output /* an alternative to `#define NOMINMAX` - you can define min and max macro in the following way #ifndef NOMINMAX #define min(x,y) ((x) < (y) ? (x) : (y)) #define max(x,y) ((x) > (y) ? (x) : (y)) #endif // no use of `using namespace std;` | increase complexity and decrease efficiency int main () std::cout<< "Successful!" ; Successful! 作为 Windows 特定的头文件,它包含 Windows API 函数的所有声明、通用宏以及各种函数和子系统的数据类型,并定义非常大的 Windows 特定函数作为 C++ 程序的一部分。

由于没有合理的替代方案,它几乎成为每个基于 Windows 的 C++ 程序的一部分。 您可以进一步编译它以排除一些不必要的函数和预定义变量。

使用 WIN32_LEAN_AND_MEAN 增强 C++ 中 Windows.h 的有效性 当在调用 windows.h 之前定义 WIN32_LEAN_AND_MEAN 时,它将绕过一些不太有用或必需的 Windows 标头。 它是提高 windows.h 效率的更快解决方案之一。

使用 VC_EXTRALEAN 或 WIN32_LEAN_AND_MEAN 可以减小 windows.h 头文件的大小,但使用这些预处理器中的任何一个有时都无法满足您的需求,并且您需要包含另一个头文件。

使用MSDN搜索来命名您要使用的函数,以便它可以告诉您它属于哪个头文件。

它排除了不太有用或特定用途的 API,例如 DDE、Windows Sockets、RPC、Shell 和加密技术。

此外,OPENFILENAMEW 的文档表示 commdlg.h 是 windows.h 的一部分,但 WIN32_LEAN_AND_MEAN 将其从 windows.h 中排除,并且您可以单独包含它,因为 commdlg.h 使用 windows.h 中定义的宏。

# define WIN32_LEAN_AND_MEAN # define VC_EXTRALEAN // an alternative or addition # include <Windows.h> # include <iostream> // output int main () int a = 5 ; int b = 7 ; int sol; sol = a * (b/a); std::cout<<sol; 由于它排除了一些不常用的 Windows API,因此它加快了构建过程并减小了 Win32 头文件的大小。

windows.h 包含它和许多其他子标头; 因此,专门定义一个可以最大限度地利用 C++ 进程的资源。

在 C++ 程序中包含子标头来替换 Windows.h 以增强其有效性 windows.h 的子标题的结构似乎相当稳定。 您可以包含许多较小的标头之一来定义您的需求,而不是使用 windows.h 作为一个整体并仅使用其一两个功能。

Windef.h 包含 windows.h 的许多基本函数,并且基于七千多行实际代码。 fileapi.h 定义了 CreateFile、FindFirstFile 和其他类似函数。

# include <windef.h> # include <fileapi.h> # include <iostream> int main () typedef struct tagPOINT LONG x; LONG y; POINT, *PPOINT, *NPPOINT, *LPPOINT; std::cout<< "The operation is successful!" ; The operation is successful! 此外,您可以使用synchapi.h 进行同步原语(WaitForMultipleObjects、InitializeCriticalSection 或windows.h 中的其他同步函数部分)。

debugapi.h 子头文件用于 OutputDebugString、IsDebuggerPresent 和其他调试函数。