Preprocesador y macros en C: Dominando #include, #define y compilación condicional
Preprocesador y macros en C
Explore el poder del preprocesador de C: aprenda a incluir cabeceras, definir constantes y funciones, y controlar el flujo de compilación con directivas condicionales.

El preprocesador de C se ejecuta antes del compilador, transformando su código fuente expandiendo macros, incluyendo archivos de cabecera y evaluando declaraciones condicionales. Es una herramienta esencial para escribir código flexible y reutilizable.
Todas las directivas del preprocesador comienzan con un símbolo #. Por ejemplo:
#define PI 3.14
Inclusión de archivos de cabecera: #include
La directiva #include inserta el contenido de un archivo de cabecera directamente en su archivo fuente. Uso común:
#include <stdio.h>
Sin #include <stdio.h>, funciones como printf() y scanf() estarían indefinidas. También puede crear cabeceras personalizadas:
#include "mi_cabecera.h"
Las cabeceras personalizadas son útiles para agrupar declaraciones de funciones y constantes relacionadas.
Definición de constantes y expresiones: #define
Un macro reemplaza un token o expresión con un valor antes de la compilación. Ejemplo:
#define c 299792458 /* velocidad de la luz */
Usar c en cualquier parte de su programa se expande a 299792458.
Ejemplo 1: Definir PI
#include <stdio.h>
#define PI 3.1415
int main() {
float radio, area;
printf("Introduzca el radio: ");
scanf("%f", &radio);
area = PI * radio * radio;
printf("Área=%.2f", area);
return 0;
}
Macros tipo función
Los macros pueden aceptar argumentos, funcionando de forma similar a funciones inline:
#define circleArea(r) (3.1415 * (r) * (r))
Para circleArea(5), el preprocesador lo expande a (3.1415 * 5 * 5).
Ejemplo 2: Usando un macro tipo función
#include <stdio.h>
#define PI 3.1415
#define circleArea(r) (PI * (r) * (r))
int main() {
float radio, area;
printf("Introduzca el radio: ");
scanf("%f", &radio);
area = circleArea(radio);
printf("Área = %.2f", area);
return 0;
}
Compilación condicional
Las directivas condicionales le permiten incluir o excluir bloques de código en tiempo de compilación, similar a sentencias if pero evaluadas antes de la ejecución.
Casos de uso comunes
- Dirigirse a diferentes sistemas operativos o hardware.
- Crear builds de depuración sin sobrecarga en tiempo de ejecución.
- Mantener caminos de código heredado para referencia.
Directivas clave
#ifdef MACRO /* código cuando MACRO está definido */ #endif
#if EXPRESIÓN /* código cuando EXPRESIÓN es no-cero */ #else /* código cuando EXPRESIÓN es cero */ #endif
#if EXPRESIÓN /* código */ #elif OTRA_EXPRESIÓN /* código alternativo */ #else /* código de respaldo */ #endif
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048 /* búfer es suficientemente grande */ #endif
Macros predefinidas
| Macro | Valor |
|---|---|
__DATE__ | String de la fecha actual de compilación |
__FILE__ | String del nombre del archivo actual |
__LINE__ | Número de línea donde aparece el macro |
__STDC__ | No-cero si el compilador sigue el estándar ANSI C |
__TIME__ | String de la hora actual de compilación |
Ejemplo 3: Mostrando hora de compilación
#include <stdio.h>
int main() {
printf("Hora actual: %s", __TIME__);
return 0;
}
Ejemplo de salida:
Hora actual: 19:54:39
Lecturas recomendadas
- Control de línea
- Pragmas
- Salida del preprocesador
- Otras directivas
Lenguaje C
- Resumen Integral de Resistores, Inductores y Capacitores en Circuitos de CA
- Entendiendo palabras clave e identificadores en C#: Reglas, listas y mejores prácticas
- Clases y objetos en C#: Fundamentos para POO robusta
- Dominando clases y métodos abstractos en C#: Guía práctica
- Entendiendo clases y métodos parciales en C#
- Dominando clases y métodos sealed en C#: Cuándo usarlos, ejemplos claros y mejora de seguridad y rendimiento
- Dominando las Directivas de Preprocesador en C#: Guía Práctica
- Palabras clave e identificadores en C: guía práctica
- Entendiendo constantes y literales en C: Tipos, uso y mejores prácticas
- Dominando Entrada y Salida en programación C
- Entendiendo el Preprocesador de C (CPP): Cómo Simplifica la Compilación