En este tutorial, se le presentarán los preprocesadores de c, y aprenderá a usar #include, #define y la compilación condicional con la ayuda de ejemplos.
El preprocesador de C es un preprocesador de macros (le permite definir macros) que transforma su programa antes de que se compile. 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 de C son:
Incluyendo archivos de encabezado: #include
El #include
preprocesador se utiliza para incluir archivos de encabezado en programas C. Por ejemplo,
#include
Aquí stdio.h
hay un archivo de encabezado. La #include
directiva del preprocesador reemplaza la línea anterior con el contenido del stdio.h
archivo de encabezado.
Esa es la razón por la que necesita usar #include
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 utilizando la #define
directiva de preprocesador.
He aquí un ejemplo.
#define c 299792458 // speed of light
Aquí, cuando usamos c en nuestro programa, se reemplaza por 299792458
.
Ejemplo 1: #define preprocessor
#include #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 funcionen de manera similar a una llamada de función. Esto se conoce como macros de función. Por ejemplo,
#define circleArea(r) (3.1415*(r)*(r))
Cada vez que el programa se encuentra circleArea(argument)
, es reemplazado por (3.1415*(argument)*(argument))
.
Supongamos que pasamos 5 como argumento y luego se expande como se muestra a continuación:
circleArea(5) expands to (3.1415*5*5)
Ejemplo 2: uso del preprocesador #define
#include #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 macros y #define preprocessor.
Compilación condicional
En la programación en C, puede indicar al preprocesador si debe incluir un bloque de código o no. Para hacerlo, se pueden utilizar directivas condicionales.
Es similar a una if
declaración con una gran diferencia.
La if
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 utilizan para incluir (u omitir) un bloque de código en su programa antes de la ejecución.
Usos de condicional
- use un código diferente según la máquina, el sistema operativo
- compilar el mismo archivo fuente en dos programas diferentes
- para excluir cierto código del programa pero para mantenerlo como referencia para propósitos futuros
¿Cómo usar condicional?
Para utilizar condicional, #ifdef
, #if
, #defined
, #else
y #elseif
se utilizan directivas.
Directiva #ifdef
#ifdef MACRO // conditional codes #endif
Aquí, los códigos condicionales se incluyen en el programa solo si se define MACRO.
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 con un valor distinto de cero.
La #else
directiva opcional se puede utilizar con #if
directiva.
#if expression conditional codes if expression is non-zero #else conditional if expression is 0 #endif
También puede agregar condiciones anidadas a su #if… #else
uso#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 usa para probar si una determinada macro está definida o no. A menudo se usa con la directiva #if.
#if defined BUFFER_SIZE && BUFFER_SIZE>= 2048 // codes
Macros predefinidas
Aquí hay algunas macros predefinidas en la programación de 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 C de ANSI, entonces el valor es un número entero distinto de cero |
__TIME__ | Una cadena que contiene la fecha actual. |
Ejemplo 3: obtener la hora actual con __TIME__
El siguiente programa genera la hora actual mediante __TIME__
macro.
#include int main() ( printf("Current time: %s",__TIME__); )
Salida
Hora actual: 19:54:39
Lecturas recomendadas
- Control de línea
- Pragmas
- Salida del preprocesador
- Otras directivas