Introducción a las directivas de preprocesador en C

La mayoría de las veces se crea como una idea errónea de que los preprocesadores o las macros son parte de la compilación del programa, pero es totalmente incorrecto. Las directivas de preprocesador son el tipo de macros y una fase antes de que tenga lugar la compilación. Se puede decir que estas son algunas instrucciones dadas al compilador para realizar una compilación real. También se conocen como abreviaturas de construcción más largas para macros, lo que significa que el valor en macros se reemplaza con el segmento de códigos. La macro está definida por un símbolo especial y tiene un símbolo que comienza con "#". Por lo tanto, esta # definición es un tipo de preprocesador especial seguido por el compilador real. En este tema, aprenderemos sobre las directivas de preprocesador en C.

El preprocesador tiene un tipo especial de representación para su identificación, como cualquier directiva de preprocesador que se inicia mediante un símbolo especial de "#" seguido de un identificador y luego el nombre de la directiva. También se permite el espacio en blanco antes y después del #. Por ejemplo, # include.

Hay ciertos ajustes o instalaciones que un preprocesador C puede proporcionar:

  • Archivos de encabezado: la inclusión de archivos de encabezado es una forma de sustituir las declaraciones por la sintaxis y el cuerpo del programa.
  • Macro desplegable: la definición de macros es como abreviar un fragmento de código en el que un preprocesador de C reemplaza las macros con su definición respectiva.
  • Compilación por condiciones: de acuerdo con varios escenarios o diversas condiciones, la inclusión de ciertas partes del programa es posible mediante la compilación condicional.
  • Control de línea: si usa un programa para combinar o reorganizar a alguien o más archivos fuente en un archivo intermedio para compilación, puede usar el control de línea para informar al compilador de dónde se originó cada línea fuente.

Tipos de directivas de preprocesador

Todos los tipos de directivas de preprocesador son los siguientes:

  1. # define
  2. # incluye
  3. # ifdef
  4. # undef
  5. #ifndef
  6. # Si
  7. #más
  8. #elif
  9. #terminara si
  10. #error
  11. #pragma

1. #define (macros)

Una macro es un fragmento de código que se reemplaza por algún valor del código de macro. Cualquier macro se describe y define principalmente por su directiva #define.

Sintaxis:

#define token value

Hay dos tipos de macros:

  • Función - como macros
  • Objeto - como macros
Función - como macros

La función like-macro funciona casi como una llamada a función.

Por ejemplo:

#define MAX(a, b) ((a)>(b) ? (a): (b))

MAX aquí es el nombre de la macro.

Ejemplo:

Salida:

Objeto - como macros

Las macros similares a objetos son el tipo de identificador reemplazado por el valor. Se utiliza principalmente para representar constantes numéricas.

#define PI 3.1415

Aquí el valor de PI será sustituido por la macro.


Salida:

2. #include

Hay alguna otra funcionalidad para la directiva de preprocesador include. Tiene sus propias tres variantes que reemplazan el código con el código de los archivos fuente actuales.

Las tres variantes son las siguientes:

  • #incluir
  • #include "archivo"
  • Incluir cualquier otra cosa

#incluir

Busca un archivo en la lista definida del sistema o directorios como se especifica y luego busca una lista estándar de bibliotecas del sistema.

#include "archivo"

Este tipo se utiliza para sus propios archivos de encabezado personalizados del programa. Se realiza una búsqueda de un archivo llamado archivo primero en el directorio actual seguido por los archivos de encabezado del sistema y los directorios actuales del archivo actual del directorio.

#incluye cualquier cosa

Este tipo de directiva de preprocesador de inclusión se utiliza cuando ninguno de los otros dos tipos restantes de la directiva y sus argumentos no se ajustan ni satisfacen la estructura de cálculo.

3. #Ifdef

Comprueba si la macro está definida por # define o no. En caso afirmativo, ejecutará el código; de lo contrario, no lo hará.

Sintaxis:

#ifdef MACRO
(
Code body
)
#endif
#undef:

Cancelar la definición de una macro significa que no está definida y está precedida por la directiva #undef.

Sintaxis:

#undef token

Salida:

4. Ifndef

Este procesador verifica si #define está definido o no por #define. En caso afirmativo, ejecuta el código.

Sintaxis:

#Ifndef MACRO
//code
#endif
#If

Este procesador funciona solo como un bucle if, evalúa la expresión o condición. Si la condición id es verdadera Ejecutará el código, de lo contrario no.

Sintaxis:

#if expression
//code
#endif
#else

La directiva de preprocesador #else se usa para evaluar la expresión o condición si la condición de #if es falsa. Se puede usar con las directivas #if, #elif, #ifdef y #ifndef.

Sintaxis:

#if expression
//if body
#else
//else body
#endif

Ejemplo:

Salida:

5. #Error

Como su nombre indica, la directiva de preprocesador de error se utiliza para indicar un error y luego el compilador da un error grave si se encuentra la directiva de error y omite los siguientes pasos de compilación.

Salida:

6. #pragma

Depende del compilador, ya que diferentes sistemas operativos y diferentes máquinas proporcionan todos los tipos de características del sistema operativo que utiliza el compilador para ofrecer información adicional al compilador.

Sintaxis:

#pragma token

Ejemplo:

Salida:

Cada preprocesador tiene su propia importancia, ya que la directiva condicional se utiliza para verificar si una parte del programa se debe tener en cuenta en función de los escenarios o no.

Supongamos que un programa quiere compilarse en un entorno específico con la configuración específica del sistema operativo, pero tan pronto como pasa a esa fase de compilación arroja un error o puede dar un código no válido simplemente dando a su programa la posibilidad de un gran no para vincular el programa y ejecutarlo mientras se ejecuta. También puede haber otra posibilidad en la que el mismo archivo fuente con dos programas diferentes puede hacer una verificación de consistencia que consume mucho tiempo o sus datos inmediatos, o imprime los valores de datos con depuración.

Además, estos escenarios que se crearán con cómputo también se pueden usar para ejecutarse en una máquina utilizando directivas de preprocesamiento.

Conclusión

La salida del preprocesador C se parece mucho a la entrada, excepto que todas las directivas de preprocesamiento se han reemplazado por líneas en blanco o espacios en blanco. Los diferentes archivos y formatos tienen diferentes sintaxis que dicen que se ha realizado el inicio de un nuevo archivo o que indican que se debe volver a un archivo o que se debe procesar antes de la compilación.

Todos los escenarios se utilizan para que otros conozcan el poder del preprocesador C y cómo está evolucionando con diferentes versiones del compilador que comenzaron con los estándares GCC y ANSI.

Artículos recomendados

Esta es una guía de directivas de preprocesador en C. Aquí discutimos los tipos de directivas de preprocesador con sintaxis y ejemplos. También puede echar un vistazo a los siguientes artículos para obtener más información:

  1. Número inverso en C
  2. Ordenar en C
  3. Función de hash en C
  4. Continuar declaración en C
  5. Ordenar en C #
  6. ¿Cómo funciona la función hash en php?