Windows.h と std でのマクロの衝突の処理
Windows API と C 標準ライブラリを使用する場合、マクロ間の衝突が発生する可能性があります。最大値などの定義。これは、max() を定義する Windows.h がインクルードされ、その後、同様に max() を定義する C 標準ライブラリがインクルードされる場合に発生する可能性があります。
回避策の 1 つは、で提案されているように、競合するマクロを再定義することです。提供したコード スニペット (#undef max)。ただし、これは面倒でエラーが発生しやすい可能性があります。より良い解決策は、Windows.h 内の max() および関連マクロの定義を抑制することです。これは、プリプロセッサ マクロ NOMINMAX を定義することで実現できます。
#define NOMINMAX #include <Windows.h> #include <iostream> using std::cin; using std::cout; void Foo() { int delay = 0; do { if(cin.fail()) { cin.clear(); cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); } cout << "Enter number of seconds between submissions: "; } while(!(cin >> delay) || delay == 0); }
Windows.h をインクルードする前に NOMINMAX を定義すると、max()、min() などのマクロ定義が抑制され、C 標準が許可されます。これらのマクロのライブラリのバージョンは競合せずに使用されます。
以上がWindows.h と C 標準ライブラリ間のマクロ衝突を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。