El preprocesador C es un preprocesador de macros (permite definir macros) que transforma tu programa antes de ser compilado. Estas transformaciones pueden ser la inclusión de archivo de cabecera, 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 de C son:
- Incluir archivos de cabecera: #include
- Macros utilizando #define
- Ejemplo 1: #define preprocesador
- Macros tipo función
- Ejemplo 2: Usando #define preprocesador
- Compilación condicional
- Usos de los condicionales
- ¿Cómo usar condicionales?
- #ifdef Directiva
- #if, #elif y #else Directiva
- #defined
- Macros predefinidas
- Ejemplo 3: Obtención de la hora actual mediante __TIME__
- Las lecturas recomendadas
Incluir archivos de cabecera: #include
El preprocesador #include
se utiliza para incluir archivos de cabecera a los programas C. Por ejemplo,
#include <stdio.h>
Aquí, stdio.h
es un archivo de cabecera. La directiva del preprocesador #include
reemplaza la línea anterior con el contenido del archivo de cabecera stdio.h
.
Esa es la razón por la que necesita usar #include <stdio.h>
antes de poder usar funciones como scanf()
y printf()
.
También puede crear su propio archivo de cabecera que contenga la declaración de funciones e incluirlo en su programa utilizando esta directiva del preprocesador.
#include "my_header.h"
Visite esta página para aprender más sobre el uso de archivos de cabecera.
Macros utilizando #define
Una macro es un fragmento de código al que se le da un nombre. Puedes definir una macro en C utilizando la directiva del preprocesador #define
.
Aquí tienes un ejemplo.
#define c 299792458 // speed of light
Aquí, cuando usamos c en nuestro programa, se sustituye por 299792458
.
Ejemplo 1: #define preprocesador
#include <stdio.h>#define PI 3.1415int 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;}
Macros tipo función
También puedes definir macros que funcionen de forma similar a una llamada de función. Esto se conoce como macros similares a una función. Por ejemplo,
#define circleArea(r) (3.1415*(r)*(r))
Cada vez que el programa encuentra circleArea(argument)
, se sustituye por (3.1415*(argument)*(argument))
.
Supongamos que pasamos 5 como argumento entonces, se expande como abajo:
circleArea(5) expands to (3.1415*5*5)
Ejemplo 2: Usando #define preprocesador
#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;}
Visita esta página para aprender más sobre macros y #define preprocesador.
Compilación condicional
En la programación en C, puedes indicarle al preprocesador si debe incluir un bloque de código o no. Para ello, se pueden utilizar directivas condicionales.
Es similar a una sentencia if
con una diferencia importante.
La sentencia if
se comprueba durante el tiempo de ejecución para comprobar si un bloque de código debe ser ejecutado o no mientras que, las condicionales se utilizan para incluir (o saltar) un bloque de código en su programa antes de la ejecución.
Usos de los condicionales
- utilizar código diferente dependiendo de la máquina, sistema operativo
- compilar el mismo archivo fuente en dos programas diferentes
- excluir cierto código del programa pero mantenerlo como referencia para propósitos futuros
¿Cómo usar condicionales?
Para utilizar el condicional se utilizan las directivas #ifdef
, #if
, #defined
, #else
y #elseif
.
#ifdef Directiva
#ifdef MACRO // conditional codes#endif
Aquí, los códigos condicionales se incluyen en el programa sólo si se define MACRO.
#if, #elif y #else Directiva
#if expression // conditional codes#endif
Aquí, la expresión es una expresión de tipo entero (puede ser enteros, caracteres, expresión aritmética, macros y así sucesivamente).
Los códigos condicionales se incluyen en el programa sólo si la expresión se evalúa a un valor distinto de cero.
La directiva opcional #else
puede utilizarse con la directiva #if
.
#if expression conditional codes if expression is non-zero#else conditional if expression is 0#endif
También puede añadir condicionales anidados a su #if...#else
utilizando #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
#defined
El operador especial #defined se utiliza para comprobar si una determinada macro está definida o no. Se utiliza a menudo con la directiva #if.
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048 // codes
Macros predefinidas
Aquí hay algunas macros predefinidas en la programación en C.
Macro | Valor |
---|---|
__DATE__ |
Una cadena que contiene la fecha actual |
__FILE__ |
Una cadena que contiene el nombre del archivo |
__LINE__ |
Un entero que representa el número de línea actual |
__STDC__ |
Si sigue el estándar ANSI C, entonces el valor es un entero no nulo |
__TIME__ |
Una cadena que contiene la fecha actual. |
Ejemplo 3: Obtención de la hora actual mediante __TIME__
El siguiente programa da salida a la hora actual mediante la macro __TIME__
.
#include <stdio.h>int main(){ printf("Current time: %s",__TIME__); }
Salida
Current time: 19:54:39
Las lecturas recomendadas
- Control de línea
- Pragmas
- Salida del preprocesador
- Otras directivas