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

El preprocesador #includese 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada.