C/Visual C - Ayuda la comprensión de una macro

 
Vista:
sin imagen de perfil

Ayuda la comprensión de una macro

Publicado por Diego (150 intervenciones) el 17/04/2014 21:59:59
Buenas tardes acabo de crear un programa, y nos pidieron que en invocasemos a las macros con un posincremestro(si no me equivoco se llama así).

Este es el programa con el pos incremento incluido:
1
2
3
4
5
6
7
8
9
10
11
12
13
#define min(a,b) ((a > b)? b : a)
#define max(a,b) ((a > b)? a : b)
#include <stdio.h>
int main()
{
	int a, b, res;
	scanf("%d %d", &a, &b);
	res = min(a++, b++);
	printf("El minimo es: %d , a: %d  y b: %d \n", res, a, b);
	res = max(a++, b++);
	printf("El maximo es: %d , a: %d  y b: %d \n", res, a, b);
	return 0;
}

No sé si estaré en lo correcto, pero ¿la macro min le llega a++ y quedaría así?:
min (a++, b++) ((a++ >b++)? b++: a++) de ser así quisiera saber cuando se hace el incremento ya que habria dos uno en la comparación y otro más sugún corresponda.

Aunque no creo que la macro min quede min(a++, b++) más bien creo que queda igual: min (a, b) y que luego de la comparación incrementa en la desición que haya tomado.


En definitiva la forma en la que se comporta la macro con el pos incremento me dejo mareado tratando de ver como funciona.
Les agradezco por su tiempo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda la comprensión de una macro

Publicado por alfredO (3 intervenciones) el 26/04/2014 04:58:13
No sé a qué te refieras. Los operadores de postincremento y preincremento no hacen más que sumarle 1 a la cantidad de una variable.

Esto:
1
2
int a = 5;
a = a + 1; /* ahora 'a' es igual a 6 */

Es igual que esto:
1
2
int a = 5;
a++; /* a = 6 */

No tiene mucho sentido incrementar las variables para compararlas, pues aunque le incrementes uno, una variable siempre será mayor, menor o igual que la otra.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#define min(a,b) ((a > b)? b : a)
#define max(a,b) ((a > b)? a : b)
int main()
{
	int a, b, res;
	scanf("%d %d", &a, &b);
	res = min(a, b);
	printf("El minimo es: %d , a: %d  y b: %d \n", res, a, b);
	res = max(a, b);
	printf("El maximo es: %d , a: %d  y b: %d \n", res, a, b);
	return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar