Erreurs C++ étranges avec du code comportant des appels min()/max()
Question
Je vois des erreurs étranges lorsque mon code C++ contient des appels min() ou max().J'utilise des compilateurs Visual C++.
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++))Les () dans l'expansion servent à éviter les problèmes si vous l'appelez avec des formules.Essayez d'étendre max(a,b+c)après je suis soit plus 1, soit plus 2
É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))