Heim >Backend-Entwicklung >C++ >Wie löst man die „max'-Makrokollision zwischen Windows.h und der Standardbibliothek?

Wie löst man die „max'-Makrokollision zwischen Windows.h und der Standardbibliothek?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-11 16:41:02230Durchsuche

How to Resolve the `max` Macro Collision Between Windows.h and the Standard Library?

Minimale und maximale Makrokollision zwischen Windows.h und Std

Beim Umgang mit der Eingabevalidierung in C kann es zu einem Konflikt zwischen den kommen max-Makro definiert in Windows.h und die max-Funktion in der Standardbibliothek. Dies kann auftreten, wenn versucht wird, das Fehlerflag des Eingabestreams mit der Ignorierfunktion zu löschen.

Um dieses Problem zu beheben, sollten Sie den folgenden Ansatz in Betracht ziehen:

#define NOMINMAX
#include <Windows.h>
#include <iostream>

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);
}

Das NOMINMAX-Makro unterdrückt die Mindest- und max-Definitionen in Windows.h, sodass das Programm die Max-Funktion aus der Standardbibliothek ohne Konflikte verwenden kann. Durch diesen Ansatz entfällt die Notwendigkeit, die Definition des Max-Makros manuell aufzuheben und später neu zu definieren.

Das obige ist der detaillierte Inhalt vonWie löst man die „max'-Makrokollision zwischen Windows.h und der Standardbibliothek?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn