Maison >développement back-end >C++ >Comment résoudre les collisions de macros entre Windows.h et la bibliothèque standard C ?

Comment résoudre les collisions de macros entre Windows.h et la bibliothèque standard C ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-17 04:42:03278parcourir

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

Gestion des collisions de macros dans Windows.h et std

Lorsque vous travaillez avec les API Windows et la bibliothèque standard C, vous pouvez rencontrer des conflits entre les macros définitions, telles que max. Cela peut se produire si Windows.h est inclus, qui définit max(), et que par la suite la bibliothèque standard C est incluse, qui définit également max().

Une solution de contournement consiste à redéfinir les macros en conflit, comme suggéré dans l'extrait de code que vous avez fourni (#undef max). Cependant, cela peut être fastidieux et sujet aux erreurs. Une meilleure solution consiste à supprimer la définition de max() et des macros associées dans Windows.h. Ceci peut être réalisé en définissant la macro de préprocesseur NOMINMAX.

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

En définissant NOMINMAX avant d'inclure Windows.h, les définitions de macro pour max(), min() et d'autres sont supprimées, permettant au standard C les versions de la bibliothèque de ces macros à utiliser sans conflits.

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