Pregunta

Veo errores extraños cuando mi código C++ tiene llamadas min() o max().Estoy usando compiladores de Visual C++.

¿Fue útil?

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++))

después i es más 1 o más 2

Los () en la expansión son para evitar problemas si lo llamas con fórmulas.Intente expandir max(a,b+c)

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))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top