Maison > Article > développement back-end > Comment éviter les collisions de macros « maximales » entre Windows.h et la bibliothèque standard ?
Résolution de la collision entre les macros Windows.h et Std
Lorsque vous essayez d'obtenir une entrée entière valide de cin, il est courant de rencontrer une collision entre la macro max définie dans Windows.h et celle de la bibliothèque standard. Ce problème survient lors de l'utilisation de la fonction std::cin.ignore() avec l'argument max, qui prend un nombre de paramètres différent dans Windows.h que dans std.
Solution : Suppression de Windows.h Macros
Pour éviter la collision, définissez la macro NOMINMAX. Cette macro empêche l'inclusion des définitions min et max de Windef.h, résolvant ainsi l'ambiguïté avec les macros de la bibliothèque standard.
Implémentation :
#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); }
En définissant NOMINMAX, vous pouvez utiliser la macro max de la bibliothèque standard sans redéfinir ni stocker sa définition séparément. Cela simplifie le code et élimine le besoin de solutions de contournement sujettes aux erreurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!