#include <Windows.h> 是不好的做法吗?

Ayx*_*xan 7 c++ winapi

我认为人们普遍认为这#include <bits/stdc++.h>是不好的做法,部分原因是它解析并包含每个标准标头,这几乎总是不必要的(它也是不可移植的,但这超出了我的观点)。当联合这更糟糕using namespace std;,因为现在你有一吨的通用名称的命名空间,喜欢next

然而,这似乎#include <Windows.h>主要被认为是可以的(我见过的大多数 Win32 程序都使用它),即使它在概念上与#include <bits/stdc++.h>+的组合做同样的事情using namespace std;

根据维基百科

windows.h是 C 和 C++ 编程语言的 Windows 特定头文件,其中包含 Windows API 中所有函数的声明、Windows 程序员使用的所有常用宏以及各种函数使用的所有数据类型和子系统。它定义了大量可在 C 中使用的 Windows 特定函数。

为什么会这样?是否不可能包含我们使用的特定标题而不包含<Windows.h>

Tim*_*mbo 7

Msdn 文档明确地告诉您 (a) 函数在哪个头文件中声明,以及 (b) 您应该包含哪个头文件。

大多数函数都会告诉您包括windows.h,例如SendMessage

某些后来添加或具有非常特定用例的函数只能通过其他头文件使用,例如SetupDiEnumDeviceInfo

所以不,听从他们的建议是不错的做法。但是,我强烈建议在通过宏包含之前禁用它的某些部分,例如

#define NOMINMAX
#include <Windows.h>
Run Code Online (Sandbox Code Playgroud)

否则你会得到一个minmax宏,将干扰std::minstd::max

  • @Ayxan ...从字面上看,接下来的两个词是“(包括Windows.h)”。 (3认同)
  • @Ayxan 基本上,Windows 标头一团糟。尽管看起来您可以在实践中为特定任务包含更具体的标头,但它不起作用(至少不是我上次尝试的,那是不久前的事)。 (2认同)