Preprocesador C y macros
Preprocesador C y Macros
En este tutorial, conocerá los preprocesadores c y aprenderá a usar #include, #define y compilación condicional con la ayuda de ejemplos.

El preprocesador C es un preprocesador de macros (le permite definir macros) que transforma su programa antes de compilarlo. Estas transformaciones pueden ser la inclusión de archivos de encabezado, expansiones de macros, etc.
Todas las directivas de preprocesamiento comienzan con un #
símbolo. Por ejemplo,
#define PI 3.14
Algunos de los usos comunes del preprocesador C son:
Incluyendo archivos de encabezado:#include
El #include
El preprocesador se utiliza para incluir archivos de encabezado en programas C. Por ejemplo,
#include <stdio.h>
Aquí, stdio.h
es un archivo de cabecera. El #include
la directiva del preprocesador reemplaza la línea anterior con el contenido de stdio.h
archivo de encabezado.
Esa es la razón por la que necesitas usar #include <stdio.h>
antes de poder usar funciones como scanf()
y printf()
.
También puede crear su propio archivo de encabezado que contenga la declaración de función e incluirlo en su programa utilizando esta directiva de preprocesador.
#include "my_header.h"
Visite esta página para obtener más información sobre el uso de archivos de encabezado.
Macros usando #define
Una macro es un fragmento de código al que se le da un nombre. Puede definir una macro en C usando el #define
directiva de preprocesador.
He aquí un ejemplo.
#define c 299792458 // speed of light
Aquí, cuando usamos c en nuestro programa, se reemplaza con 299792458
.
Ejemplo 1:#define preprocesador
#include <stdio.h>
#define PI 3.1415
int main()
{
float radius, area;
printf("Enter the radius: ");
scanf("%f", &radius);
// Notice, the use of PI
area = PI*radius*radius;
printf("Area=%.2f",area);
return 0;
}
Funciona como Macros
También puede definir macros que funcionan de manera similar a una llamada de función. Esto se conoce como macros similares a funciones. Por ejemplo,
#define circleArea(r) (3.1415*(r)*(r))
Cada vez que el programa encuentra circleArea(argument)
, se reemplaza por (3.1415*(argument)*(argument))
.
Supongamos que pasamos 5 como argumento y luego se expande de la siguiente manera:
circleArea(5) expands to (3.1415*5*5)
Ejemplo 2:Uso del preprocesador #define
#include <stdio.h>
#define PI 3.1415
#define circleArea(r) (PI*r*r)
int main() {
float radius, area;
printf("Enter the radius: ");
scanf("%f", &radius);
area = circleArea(radius);
printf("Area = %.2f", area);
return 0;
}
Visite esta página para obtener más información sobre las macros y #define el preprocesador.
Compilación condicional
En la programación C, puede indicarle al preprocesador si debe incluir un bloque de código o no. Para hacerlo, se pueden usar directivas condicionales.
Es similar a un if
declaración con una gran diferencia.
El if
La declaración se prueba durante el tiempo de ejecución para verificar si un bloque de código debe ejecutarse o no, mientras que los condicionales se usan para incluir (u omitir) un bloque de código en su programa antes de la ejecución.
Usos de condicional
- usar código diferente dependiendo de la máquina, sistema operativo
- compilar el mismo archivo fuente en dos programas diferentes
- para excluir cierto código del programa pero mantenerlo como referencia para propósitos futuros
¿Cómo usar condicional?
Para usar condicional, #ifdef
, #if
, #defined
, #else
y #elif
se utilizan directivas.
Directiva #ifdef
#ifdef MACRO
// conditional codes
#endif
Aquí, los códigos condicionales se incluyen en el programa solo si MACRO está definido.
Directiva #if, #elif y #else
#if expression
// conditional codes
#endif
Aquí, expresión es una expresión de tipo entero (pueden ser números enteros, caracteres, expresión aritmética, macros, etc.).
Los códigos condicionales se incluyen en el programa solo si la expresión se evalúa a un valor distinto de cero.
El #else
opcional la directiva se puede usar con #if
directiva.
#if expression
conditional codes if expression is non-zero
#else
conditional if expression is 0
#endif
También puede agregar condicional anidado a su #if...#else
usando #elif
#if expression
// conditional codes if expression is non-zero
#elif expression1
// conditional codes if expression is non-zero
#elif expression2
// conditional codes if expression is non-zero
#else
// conditional if all expressions are 0
#endif
#definido
El operador especial #defined se utiliza para probar si una determinada macro está definida o no. A menudo se usa con #if directiva.
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048
// codes
Macros predefinidos
Aquí hay algunas macros predefinidas en la programación C.
Macro | Valor |
---|---|
__DATE__ | Una cadena que contiene la fecha actual |
__FILE__ | Una cadena que contiene el nombre del archivo |
__LINE__ | Un número entero que representa el número de línea actual |
__STDC__ | Si sigue el estándar ANSI C, entonces el valor es un número entero distinto de cero |
__TIME__ | Una cadena que contiene la fecha actual. |
Ejemplo 3:Obtenga la hora actual usando __TIME__
El siguiente programa muestra la hora actual usando __TIME__
macro.
#include <stdio.h>
int main()
{
printf("Current time: %s",__TIME__);
}
Salida
Current time: 19:54:39
Lecturas recomendadas
- Control de línea
- Pragmas
- Salida del preprocesador
- Otras directivas
Lenguaje C
- Resumen de R, L y C
- Identificadores y palabras clave de C#
- Clase y objeto de C#
- Clase y método abstractos de C#
- C# Clase parcial y método parcial
- Clase y método sellados de C#
- Directivas de preprocesador de C#
- C Palabras clave e identificadores
- C - Constantes y Literales
- C - Entrada y Salida
- C - Preprocesadores