Heim >Backend-Entwicklung >C++ >Wie löst man die Windows.h-Max-Makrokollision mit std::numeric_limits::max()?

Wie löst man die Windows.h-Max-Makrokollision mit std::numeric_limits::max()?

DDD
DDDOriginal
2024-11-11 12:59:03724Durchsuche

How to Resolve the Windows.h Max Macro Collision with std::numeric_limits::max()?

Windows.h Max-Makrokollision mit Std: Eine Lösung

Bei der Entwicklung mit C treten Konflikte zwischen Standardbibliotheksdefinitionen und denen in der auf Es kann ein Windows.h-Header entstehen. Diese Kollision kann sich auf die Verwendung des Max-Makros auswirken.

Konkret versucht das bereitgestellte Code-Snippet, ungültige Benutzereingaben von cin mithilfe eines Max-Makros zu verarbeiten. Unter Windows steht jedoch das Max-Makro von Windows.h in Konflikt mit std::numeric_limits::max().

Um dieses Problem zu beheben, besteht ein saubererer und eleganterer Ansatz darin unterdrückt die Min- und Max-Definitionen in Windef.h. Dies kann erreicht werden, indem Sie das NOMINMAX-Makro definieren, bevor Sie Windows.h einbinden.

#define NOMINMAX
#include <Windows.h> // includes WinDef.h which defines min() max()

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

Durch die Definition von NOMINMAX deaktivieren Sie effektiv die widersprüchlichen Min- und Max-Definitionen in Windows.h und ermöglichen so die Verwendung von std:: numeric_limits::max() Makro ohne Änderung oder Aufhebung der Definition. Diese Lösung macht hässliche Workarounds überflüssig und gewährleistet eine nahtlose Integration mit der C-Standardbibliothek.

Das obige ist der detaillierte Inhalt vonWie löst man die Windows.h-Max-Makrokollision mit std::numeric_limits::max()?. 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