Macros en C
Septiembre 21 2008 :: c ::
Los Macros (asi como los includes) se manejan en el preprocesador de C que es un paso anterior separado de la compilación. Y permiten basicamente la definición de un termino que será remplazando siempre en el momento de la compilación por la expresión que se defina. El ejemplo típico es la definición de constantes, ej:
#define MAX_SIZE 1000
Macros con Variables
También pueden usarse Macros con variables, ej:
#include <stdio.h>
#define max(A, B) ((A) > (B) ? (A):(B))
int main() {
int x = 20;
int y = 10;
int z;
//Gets transformed to z = ((x + y) > (y - 10) ? (x + y):(y - 10));
z = max(x + y, x - 10);
//prints 30
printf("%d\n", z);
//Gets transformed to z = ((++x) > (++y) ? (++x):(++y);
z = max( ++x, ++y);
// ++ is doubly evaluated
//So x and y are doubly incremented
//prints 22
printf("%d\n", z);
}
Nota: Hay que tener cuidado con los efectos secundarios que se pueden causar ver ejemplo de ++x
Cuidado con comerse los parentesis y los efectos secundarios que se pueden causar
#include <stdio.h>
#define square(x) x * x
#define square_works(x) (x) * (x);
int main() {
int x = 20;
int y = 10;
int z;
//Gets transformed to z = x + y * x + y
//And because of precedence order is z = x + (y * x) + y
z = square(x + y);
//prints 230
printf("%d\n", z);
//Gets transformed to z = (x + y) * (x + y)
z = square_works(x + y);
//prints 900
printf("%d\n", z);
}
Para desdefinir un Macro se puede usar undef y se puede usar ( también para includes o defines ) estructuras condicionales con if, ej:
#if SYSTEM_BITS == 64
#define MAX_SIZE = 2^63
#elif
#define MAX_SIZE = 2^31
#endif
Referencias
The C Programming Language, Segunda Edición; Kernighan, Ritchie; Prentice Hall Hispanoamerica, 1991Autor: Emiliano Martínez Luque.
2 Responses to “Macros en C”
Deja un Comentario
Guía de los comentarios
Tu Email es requerido pero no sera publicado.
Podes usar los siguientes tags de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>
Si no comentastes antes tu comentario debera ser aprovado antes de que se lo muestre. Perdón, pero hay demasiado spam.


quiero que me digan que es macro en “c”, por favor. es una tarea de investigacion pero no aparece please, diganme.
Octubre 15th, 2008 at 10:43 pm
Que tal, Danilu. Un Macro básicamente es una operación de pre procesamiento que realiza el compilador de C antes de compilar. O sea, antes de hacer la compilación propiamente dicha, realiza estas operaciones, en general lo que se hace es declarar keywords propios como si fueran tokens del lenguaje C. Por ejemplo podes definir con un define un termino que va a tomar un nombre fijo y que en una instacia antes al momento de compilación va a ser sustituido por el compilador de C por aquello que se determino en la definición.
Ej:
#define MAX_SIZE 1000
int main() {
int array[ MAX_SIZE ]
}
Cuando el compilador trata este programa, lo lee directamente como si fuera:
int main() {
int array[ 1000 ]
}
O sea, remplaza todas las instancias de MAX_SIZE por 1000.
Espero que te sirva, un saludo,
Octubre 21st, 2008 at 10:53 pm