Errores extraños de C++ con código que tiene llamadas min()/max()
Pregunta
Veo errores extraños cuando mi código C++ tiene llamadas min() o max().Estoy usando compiladores de Visual C++.
Solución
Compruebe si su código incluye el ventanas.h archivo de encabezado y su código u otros encabezados de terceros tienen sus propios mín()/máx() definiciones.En caso afirmativo, anteponga su ventanas.h inclusión con una definición de NOMINMAX como esto:
#define NOMINMAX
#include <windows.h>
Otros consejos
Otra posibilidad podría deberse a los efectos secundarios.La mayoría de las macros mínimas y máximas incluirán los parámetros varias veces y es posible que no hagan lo esperado.También se podrían generar errores y advertencias.
max(a,i++) expands as ((a) > (i++) ? (a) : (i++))Los () en la expansión son para evitar problemas si lo llamas con fórmulas.Intente expandir max(a,b+c)después i es más 1 o más 2
Dado que Windows define esto como una macro de estilo de función, está disponible la siguiente solución:
int i = std::min<int>(3,5);
Esto funciona porque la macro min()
se expande sólo cuando min
es seguido por (
, y no cuando va seguido de <
.
Puaj...alcancelo, amigo: std::min()
, std::max()
.
No lo he usado en años, pero desde el aumento de memoria también se asignan el mínimo y el máximo, ¿posiblemente?
Honestamente, cuando se trata de mínimo/máximo, creo que es mejor definir el mío propio:
#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) >= (b) ? (a) : (b))