Maison > développement back-end > C++ > 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
Libérer: 2024-11-11 10:41:02
original
719 Les gens l'ont consulté

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);
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal