Erreurs C++ étranges avec du code comportant des appels min()/max()

StackOverflow https://stackoverflow.com/questions/14165

  •  08-06-2019
  •  | 
  •  

Question

Je vois des erreurs étranges lorsque mon code C++ contient des appels min() ou max().J'utilise des compilateurs Visual C++.

Était-ce utile?

La solution

Vérifiez si votre code inclut le windows.h fichier d'en-tête et votre code ou d'autres en-têtes tiers ont le leur min()/maximum() définitions.Si oui, ajoutez votre windows.h inclusion avec une définition de NOMINMAX comme ça:

#define NOMINMAX
#include <windows.h>

Autres conseils

Une autre possibilité pourrait provenir des effets secondaires.La plupart des macros min/max incluent les paramètres plusieurs fois et peuvent ne pas faire ce que vous attendez.Des erreurs et des avertissements pourraient également être générés.

max(a,i++) expands as ((a) > (i++) ? (a) : (i++))

après je suis soit plus 1, soit plus 2

Les () dans l'expansion servent à éviter les problèmes si vous l'appelez avec des formules.Essayez d'étendre max(a,b+c)

Étant donné que Windows définit cela comme une macro de style fonction, la solution de contournement suivante est disponible :

int i = std::min<int>(3,5);

Cela fonctionne parce que la macro min() est étendu uniquement lorsque min est suivi par (, et pas quand il est suivi de <.

Pouah...fais-le, mec : std::min(), std::max().

Je ne l'ai pas utilisé depuis des années, mais l'augmentation de la mémoire attribue également un minimum et un maximum, peut-être ?

Honnêtement, en ce qui concerne le min/max, je trouve préférable de définir le mien :

#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) >= (b) ? (a) : (b))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top