Windows.h と標準ライブラリ間の「最大」マクロ衝突を回避するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-11 10:41:02
オリジナル
666 人が閲覧しました

How Can You Avoid

Windows.h マクロと Std マクロ間の衝突を解決する

cin から有効な整数入力を取得しようとすると、衝突が発生するのが一般的です。 Windows.h で定義されている max マクロと標準ライブラリのマクロの間。この問題は、max 引数を指定して std::cin.ignore() 関数を使用するときに発生します。この関数は、Windows.h で std とは異なる数のパラメータを受け取ります。

解決策: Windows.h を抑制するマクロ

衝突を回避するには、NOMINMAX マクロを定義します。このマクロは、Windef.h からの min および max 定義の組み込みを防ぎ、標準ライブラリのマクロのあいまいさを解決します。

実装:

#pragma once
#define NOMINMAX

#include <Windows.h> // No min() or max() definitions included
#include <iostream>
using std::cin;
using std::cout;

void Foo()
{
    int delay = 0;
    do
    {
        if(cin.fail())
        {
            cin.clear();
            cin.ignore(numeric_limits<streamsize>::max(), '\n');
        }
        cout << "Enter number of seconds between submissions: ";
    } while(!(cin >> delay) || delay == 0);
}
ログイン後にコピー

定義によりNOMINMAX を使用すると、標準ライブラリの max マクロを再定義したり、その定義を個別に保存したりせずに使用できます。これによりコードが簡素化され、エラーが発生しやすい回避策が不要になります。

以上がWindows.h と標準ライブラリ間の「最大」マクロ衝突を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート