Programación en C

Macro en lenguaje C

Macro en lenguaje C
Una macro en lenguaje C es un fragmento de código al que se le ha asignado un nombre. Cuando el nombre se usa en cualquier parte del programa, el valor de la macro se reemplaza antes de la compilación del programa. En este artículo veremos en detalle cómo escribir una macro en lenguaje C.

Considere el siguiente código:

COMIENZO
INTEGER n = 5;
PRINT ("El valor de n es% d", n);
FINAL

El código anterior no es un código C válido.

Pero el siguiente código es válido:

//Ejemplo 1.C
#define START int main ()
#define END
#define INTEGER int
#define PRINT (A, B) printf (A, B)
COMIENZO
INTEGER n = 5;
PRINT ("El valor de n es% d", n);
FINAL

Antes de la compilación, la macro START, INTEGER, PRINT y END ha sido reemplazada por su valor, y el código se convierte en un código C válido. Podemos verificar usando el siguiente comando:

gcc -E Example1.C

Este comando se mostrará después de expandir todas las macros.

Ahora veremos diferentes tipos de macros:

1. Macros similares a objetos:

Sintaxis:

#define macro_name macro_value

Si la macro ocupa más de una línea podemos hacerlo de la siguiente manera:

#define macro_name macro_value1 \
macro_value2 \
macro_value3
#define MAX 200

Esta macro parece un objeto de datos, por eso este tipo de macro se llama como una macro similar a un objeto.

// Ejemplo2.C
//#incluir
#define MAX 200
int main ()

printf ("El valor MAX es:% d", MAX);
return 0;

En Exapmle2.c, MAX es una macro. De la salida, observamos que MAX es reemplazado por su valor 200.

2. Macros de función:

Sintaxis:

#define macro_name () macro_value

macro_name es un nombre definido por el usuario de la macro. Par de paréntesis tiene que poner después del macro_name. No se permite espacio entre macro_name y paréntesis. También podemos pasar argumentos en este tipo de macros.

#define add (x, y) x + y

Esta macro parece una llamada de función, por eso este tipo de macro se llama macro de función.

// Ejemplo3.C
#define add (x, y) x + y
int main ()

int a;
flotar b;
a = sumar (4,5);
b = agregar (2.5,3.6)
return 0;

En Example3.C, hemos visto que a diferencia de la función de C, la macro reemplaza solo el código con argumentos sin calcularlo. Entonces, podemos pasar diferentes tipos de datos usando la misma macro.

Si ponemos un espacio entre el nombre de la macro y el paréntesis, funciona igual que una macro similar a un objeto. Abajo C El ejemplo ilustra esto.

// Ejemplo4.C
#define add (x, y) x + y
int main ()

int a;
flotar b;
a = sumar (4,5);
b = agregar (2.5,3.6)

En Example4.c, hemos visto que la macro suma se reemplaza por (x, y) x + y . Igual que una macro similar a un objeto.

3. Macro para pegar tokens:
En lenguaje C, el operador ## se usa para pegar tokens. Usando este operador, podemos combinar dos tokens válidos en un token válido.
Ejemplo:

// Ejemplo5.C
#define MARGE (x, y) x ## y
int main ()

int num = MARGE (52,34);
return 0;

Si intentamos pegar tokens que no generan un token válido, el compilador de C da un error o advertencia.

// Ejemplo6.C
#define MARGE (x, y) x ## y
int main ()

int num = MARGE (52, +);
return 0;

En Ejemplo 6.C, tenemos un mensaje de error porque, después de una combinación de dos tokens, obtenemos un token no válido '52 + '.

4. Macro para encadenar:
En lenguaje C, el operador # se usa para convertir un parámetro macro en una constante de cadena. Cuando un operador # precede a un parámetro de macro, el parámetro se convierte en un literal de cadena. El encadenamiento se puede utilizar para macros similares a objetos y funciones.
Ejemplo:

// Ejemplo7.C
#define STRINGIZING (x) #x
int main ()

printf (STRINGIZING (Hola mundo));
return 0;

En Ejemplo 7.C tenemos una cadena "Hola mundo" usando la macro STRINGIZING.

Conclusión:

Este artículo ha aprendido sobre todos los tipos de macro-like Macros similares a objetos, Macros de función, Macro para pegar tokens, Macro para encadenar y macro para encadenar en lenguaje C. Ahora podemos usar una macro en nuestro programa C sin ninguna duda.

Instale el último juego de estrategia de OpenRA en Ubuntu Linux
OpenRA es un motor de juego de estrategia en tiempo real libre / gratuito que recrea los primeros juegos de Westwood como el clásico Command & Conquer...
Instale el último emulador de Dolphin para Gamecube y Wii en Linux
Dolphin Emulator te permite jugar los juegos de Gamecube y Wii que elijas en computadoras personales con Linux (PC). Al ser un emulador de juegos de ...
Cómo usar GameConqueror Cheat Engine en Linux
El artículo cubre una guía sobre el uso del motor de trucos GameConqueror en Linux. Muchos usuarios que juegan juegos en Windows a menudo usan la apli...