FUNCIONES vs MACROS

kalindor
20 de Junio del 2004
Hola a todos...como ya se habran dado cuenta necesito ayuda :) Hace unos dias que me atormenta la siguiente duda: leyendo un manual de C (soy nuevo en esto) y aparece el tema de las macros. segun el libro al declarar una macro, luego el texto de reemplazo se ejecutara, por ejemplo
#define MAX ((A>B)?A:B); se supone que este ejemplo devuelve el mayor entre a y b...pero entonces me pregunto yo cual hubiese sido la diferencia en haber declarado el ejemplo anterior como una funcion int, cual es la diferencia entre una funcion y una macro...
si llegaron hasta aca, gracias por haber leido mi duda que seguramente sera facil de responder para los grandes programadores q andan por aqui...gracias

Alejandro_
20 de Junio del 2004
Hola;

En general se recomienda evitar las macros (a menos que sean estrictamente necesarias), son una fuente de problemas. Prueba:

#define MAX ( (A>B) ? A : B )

int fMax(int i, int j) {
return ( (i>j) ? i : j);
}

Codigo1(int x, int y) {
int mayor1 = MAX(x++, y++);
int mayor2 = fMax(x++, y++);
}


Acá se va a expandir la macro MAX, incrementando a x e y dos veces.

Con una macro tampoco se verifica el tipo de dato. Esto parece una ventaja, si se necesita una especie de función genérica, pero el C++ tiene Templates y funciones inline para hacer las cosas mejor.

También se complica especialmente cuando se usa un "if", y cuando la macro tiene está formada de varias líneas.

En definitiva, más vale perderlas que encontrarlas.

Alejandro

Mariano Ventaja
20 de Junio del 2004
El preprocesador reemplaza los macro en todas las partes del código donde aparezca, es una simple sustitución de texto, si lo llamas 3000 veces habrá 3000 veces el macro en el código objeto.

Mientras que una función se define una vez en y cada vez que aparece en el código es llamada (con sus parametros bien definidos).

Saludos,
Mariano http://www.c0d3rz.com.ar