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