1. ホーム
  2. c++

[解決済み] #include <Windows.h> はバッドプラクティスですか?

2022-03-04 07:54:01

質問

というのは普遍的なことだと思います。 #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> ?

解決方法は?

Msdnのドキュメントでは、(a)関数がどのヘッダーファイルで宣言されているか、(b)どのヘッダーファイルをインクルードすることになっているか、が明示的に示されています。

ほとんどの関数では windows.h 例えば メッセージの送信

いくつかの関数は、後から追加されたもの、または非常に特殊なユースケースであるため、他のヘッダーファイルを通してのみ利用可能です、例えば セットアップDiEnumDeviceInfo .

ですから、彼らのアドバイスに従うことは悪いことではありません。しかし、マクロ経由でインクルードする前に、いくつかの部分を無効化することを強くお勧めします。

#define NOMINMAX
#include <Windows.h>

というのは、そうしないと minmax と干渉してしまうマクロです。 std::minstd::max .