¿Cómo funciona un Preprocesador en C?

Compilando un programa en C – Detrás de escena

Un preprocesador es un software de sistema (un programa de computadora que está diseñado para ejecutarse en el hardware y los programas de aplicación de la computadora). Realiza el preprocesamiento del lenguaje de alto nivel (HLL). El preprocesamiento es el primer paso del sistema de procesamiento del lenguaje. El sistema de procesamiento de lenguaje traduce el lenguaje de alto nivel al lenguaje de nivel de máquina o código de máquina absoluto (es decir, a la forma que puede entender la máquina).

  • El preprocesador no conoce las reglas de alcance de C. Las directivas del preprocesador como #define entran en vigencia tan pronto como se ven y permanecen vigentes hasta el final del archivo que las contiene; la estructura de bloques del programa es irrelevante.
  • Un preprocesador realiza principalmente tres tareas en el código HLL:

  1. Eliminación de comentarios: Elimina todos los comentarios. Se escribe un comentario solo para que los humanos entiendan el código. Entonces, es obvio que no sirven para una máquina. Por lo tanto, el preprocesador los elimina a todos, ya que no son necesarios en la ejecución y tampoco se ejecutarán.

    Esta es la forma de ver un archivo con comentarios eliminados en Linux):
    escriba un código C (deje que el nombre del archivo sea prog.c ). Preprocesarlo usando el comando gcc -E prog.c


    Verá la salida con el código sin comentarios.

    Este archivo se guarda con una extensión ‘.i’ (prog.i) que se ingresará al compilador.

  2. Inclusión de archivos: incluye todos los archivos de la biblioteca que necesita nuestro programa. En HLL escribimos #include , que es una directiva para el preprocesador que le indica que incluya el contenido del archivo de biblioteca especificado. Por ejemplo, #incluirle indicará al preprocesador que incluya todo el contenido en el archivo de biblioteca stdio.h.
    Esto también se puede escribir usando comillas dobles: #include “stdio.h”
    Nota: si el nombre del archivo está encerrado entre corchetes angulares, el archivo se busca en las rutas de inclusión estándar del compilador. Si el nombre del archivo está entre comillas dobles, la ruta de búsqueda se expande para incluir el directorio de origen actual.
  3. Expansión de macros: las macros se pueden llamar como funciones pequeñas que no son tan costosas de procesar. Si tenemos que escribir una función (que tiene una definición pequeña) que debe llamarse recursivamente (una y otra vez), entonces deberíamos preferir una macro a una función.
    Entonces, la definición de estas macros la realiza el preprocesador.
    #define SI 1000

    es un ejemplo simple de una macro.

    • Hay dos tipos de macros: similares a objetos (no toman parámetros) y similares a funciones (pueden tomar parámetros)
      // object-like macro
      #define        
      // function-like macro          
      #define () 
    • Puede eliminar una definición de macro con #undef:
      // delete the macro
      # undef 
    • Podemos escribir una macro de varias líneas igual que la función, pero cada declaración termina con «\».
      #include <stdio.h>
         
      #define MACRO(num, str) {\
                  printf("%d", num);\
                  printf(" is");\
                  printf(" %s number", str);\
                  printf("\n");\
                 }

Este artículo es una contribución de Diksha . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *