Heim > Backend-Entwicklung > C++ > Hauptteil

Wie löst man Makrokollisionen zwischen Windows.h und der C-Standardbibliothek?

Susan Sarandon
Freigeben: 2024-11-17 04:42:03
Original
183 Leute haben es durchsucht

How to Resolve Macro Collisions between Windows.h and the C   Standard Library?

Umgang mit Makrokollisionen in Windows.h und std

Beim Arbeiten mit Windows-APIs und der C-Standardbibliothek kann es zu Konflikten zwischen Makros kommen Definitionen wie max. Dies kann auftreten, wenn Windows.h eingebunden wird, das max() definiert, und anschließend die C-Standardbibliothek eingebunden wird, die auch max() definiert.

Eine Problemumgehung besteht darin, die widersprüchlichen Makros neu zu definieren, wie in vorgeschlagen das von Ihnen bereitgestellte Code-Snippet (#undef max). Dies kann jedoch umständlich und fehleranfällig sein. Eine bessere Lösung besteht darin, die Definition von max() und zugehörigen Makros in Windows.h zu unterdrücken. Dies kann durch die Definition des Präprozessormakros NOMINMAX erreicht werden.

#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);
}
Nach dem Login kopieren

Durch die Definition von NOMINMAX vor dem Einbinden von Windows.h werden die Makrodefinitionen für max(), min() und andere unterdrückt, wodurch der C-Standard ermöglicht wird Bibliotheksversionen dieser Makros können ohne Konflikte verwendet werden.

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

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage