GeeksforGeeks

Compilation d’un programme C – Derrière la scène

Un préprocesseur est un logiciel système (un programme informatique conçu pour fonctionner sur le matériel de l’ordinateur et les programmes d’application). Il effectue le prétraitement du langage de haut niveau (HLL). Le prétraitement est la première étape du système de traitement du langage. Le système de traitement du langage traduit le langage de haut niveau en langage de niveau machine ou en code machine absolu(c’est-à-dire sous la forme qui peut être comprise par la machine).

  • Le préprocesseur ne connaît pas les règles de portée du C. Les directives du préprocesseur comme #define entrent en vigueur dès qu’elles sont vues et restent en vigueur jusqu’à la fin du fichier qui les contient ; la structure en blocs du programme n’est pas pertinente.
  • Un préprocesseur effectue principalement trois tâches sur le code HLL :

  1. Suppression des commentaires : Il supprime tous les commentaires. Un commentaire est écrit uniquement pour que les humains puissent comprendre le code. Il est donc évident qu’ils ne sont d’aucune utilité pour une machine. Donc, le préprocesseur les supprime tous car ils ne sont pas nécessaires à l’exécution et ne seront pas exécutés aussi bien.

    Voici comment voir un fichier avec des commentaires supprimés sous linux) :
    Écrivez un code C (que le nom du fichier soit prog.c). Prétraitez-le en utilisant la commande gcc -E prog.c


    Vous verrez la sortie avec le code n’ayant pas de commentaires.

    Ce fichier est enregistré avec une extension ‘.i’ (prog.i) qui sera entrée dans le compilateur.

  2. Inclusion de fichiers : Inclure tous les fichiers de la bibliothèque dont notre programme a besoin. Dans HLL on écrit #include qui est une directive pour le préprocesseur qui lui indique d’inclure le contenu du fichier de la bibliothèque spécifié. Par exemple, #include indiquera au préprocesseur d’inclure tout le contenu du fichier de bibliothèque stdio.h.
    Cela peut aussi être écrit en utilisant des guillemets doubles – #include « stdio.h »
    Note : Si le nom de fichier est entre crochets, le fichier est recherché dans les chemins d’inclusion standard du compilateur. Si le nom de fichier est entre guillemets doubles, le chemin de recherche est étendu pour inclure le répertoire source actuel.
  3. Expansion de macros : Les macros peuvent être appelées comme de petites fonctions qui ne sont pas aussi surchargées à traiter. Si nous devons écrire une fonction (ayant une petite définition) qui doit être appelée récursivement (encore et encore), alors nous devrions préférer une macro à une fonction.
    Donc, la définition de ces macros est faite par le préprocesseur.
    #define SI 1000

    est un exemple simple de macro.

    • Il existe deux types de macros : Les macros de type objet (ne prennent pas de paramètres) et les macros de type fonction (peuvent prendre des paramètres)
      // object-like macro#define // function-like macro #define () 
    • On peut supprimer une définition de macro avec #undef:
      // delete the macro# undef 
    • On peut écrire une macro de plusieurs lignes comme une fonction, mais chaque déclaration se termine par « \ ».

      #include <stdio.h>
      #define MACRO(num, str) {\
      printf("%d", num);\
      printf(" is");\
      printf(" %s number", str);\
      printf("\n");\
      }

      
      

      
      

Cet article a été contribué par Diksha. Si vous aimez GeeksforGeeks et que vous souhaitez contribuer, vous pouvez également écrire un article en utilisant contribute.geeksforgeeks.org ou envoyer votre article par courrier à [email protected]. Voyez votre article apparaître sur la page principale de GeeksforGeeks et aidez d’autres Geeks.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.