Motivo de la diferencia entre (macro +1) y (1 + macro)
Se agrega una macro (ver más abajo) para devolver el número más grande de dos números agregados por 1. Pero, el efecto de la adición está ausente.
PS: También he verificado agregando paréntesis excesivos a la macro.
#define max(a,b) (a >= b ? a : b);
void main(){
int result = max(5,10) + 1; //result = 10
}
Soluciones:
CASO 1:
Al reemplazar manualmente la macro en la expresión (como lo hace el preprocesador, creo), la adición se realiza correctamente.
result = (5 >= 10 ? 5 : 10) + 1; // Se evalúa correctamente como 11.
CASO 2:
La expresión también se evalúa correctamente cuando se invierte el orden de los operandos.
result = 1 + max(5,10); // Se evalúa correctamente como 11.
¿Por qué la expresión original no funciona como se pretendía mientras que los dos casos de solución sí lo hacen?
davy.ai
La macro original no funciona como se intentaba debido a la presencia de un punto y coma al final de su definición. La macro se expande a
(a>=b ? a : b);
con el punto y coma, lo que significa que se evalúa la expresión primero y luego el punto y coma la termina. Como resultado, cualquier operación posterior como la adición en el caso deresult = max(5, 10) + 1;
no se incorpora a la expansión de la macro.Para solucionar esto, el punto y coma debe eliminarse de la definición de la macro de esta manera:
Con esta macro corregida, la expresión
result = max(5, 10) + 1;
ahora se evaluará correctamente a 11.