Maison  >  Article  >  développement back-end  >  Comment éviter les collisions de macros « maximales » entre Windows.h et la bibliothèque standard ?

Comment éviter les collisions de macros « maximales » entre Windows.h et la bibliothèque standard ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-11 10:41:02641parcourir

How Can You Avoid

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn