GeeksforGeeks

Kompilieren eines C-Programms – Hinter den Kulissen

Ein Präprozessor ist eine Systemsoftware (ein Computerprogramm, das dazu bestimmt ist, auf der Hardware des Computers und in Anwendungsprogrammen zu laufen). Er führt die Vorverarbeitung der Hochsprache (High Level Language(HLL)) durch. Die Vorverarbeitung ist der erste Schritt des Sprachverarbeitungssystems. Das Sprachverarbeitungssystem übersetzt die Hochsprache in Maschinensprache oder absoluten Maschinencode (d.h. in die Form, die von der Maschine verstanden werden kann).

  • Der Präprozessor kennt die Geltungsbereichsregeln von C nicht. Präprozessor-Direktiven wie #define treten in Kraft, sobald sie gesehen werden, und bleiben bis zum Ende der Datei, die sie enthält, in Kraft; die Blockstruktur des Programms ist irrelevant.
  • Ein Präprozessor führt hauptsächlich drei Aufgaben am HLL-Code aus:

  1. Entfernen von Kommentaren : Er entfernt alle Kommentare. Ein Kommentar wird nur geschrieben, damit die Menschen den Code verstehen können. Es ist also offensichtlich, dass sie für eine Maschine nicht von Nutzen sind. Daher entfernt der Präprozessor alle Kommentare, da sie für die Ausführung nicht erforderlich sind und auch nicht ausgeführt werden.

    So kann man eine Datei mit entfernten Kommentaren unter Linux sehen:
    Schreiben Sie einen C-Code (der Dateiname soll prog.c sein). Verarbeiten Sie ihn mit dem Befehl gcc -E prog.c


    Sie werden die Ausgabe mit dem Code ohne Kommentare sehen.

    Diese Datei wird mit der Erweiterung ‚.i‘ (prog.i) gespeichert, die in den Compiler eingegeben wird.

  2. Dateieinbindung : Einbindung aller Dateien aus der Bibliothek, die unser Programm benötigt. In HLL schreiben wir #include, das ist eine Direktive für den Präprozessor, die ihm sagt, dass er den Inhalt der angegebenen Bibliotheksdatei einschließen soll. Beispiel: #include weist den Präprozessor an, den gesamten Inhalt der Bibliotheksdatei stdio.h einzuschließen.
    Dies kann auch in Anführungszeichen geschrieben werden – #include „stdio.h“
    Hinweis: Wenn der Dateiname in spitzen Klammern steht, wird die Datei in den Standard-Include-Pfaden des Compilers gesucht. Wenn der Dateiname in doppelten Anführungszeichen steht, wird der Suchpfad erweitert, um das aktuelle Quellverzeichnis einzuschließen.
  3. Makroexpansion : Makros können als kleine Funktionen aufgerufen werden, die nicht so viel Aufwand bei der Verarbeitung verursachen. Wenn wir eine Funktion (mit einer kleinen Definition) schreiben müssen, die rekursiv (immer wieder) aufgerufen werden muss, dann sollten wir ein Makro einer Funktion vorziehen.
    Die Definition dieser Makros wird also vom Präprozessor vorgenommen.
    #define SI 1000

    ist ein einfaches Beispiel für ein Makro.

    • Es gibt zwei Arten von Makros: Objektähnliche (nehmen keine Parameter) und funktionsähnliche (können Parameter nehmen)
      // object-like macro#define // function-like macro #define () 
    • Sie können eine Makrodefinition mit #undef löschen:
      // delete the macro# undef 
    • Wir können ein mehrzeiliges Makro wie eine Funktion schreiben, aber jede Anweisung endet mit „\“.

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

      
      

      
      

Dieser Artikel wurde von Diksha verfasst. Wenn Ihnen GeeksforGeeks gefällt und Sie einen Beitrag leisten möchten, können Sie auch einen Artikel unter contribute.geeksforgeeks.org schreiben oder Ihren Artikel per E-Mail an [email protected] senden. Sieh zu, dass dein Artikel auf der GeeksforGeeks-Hauptseite erscheint und hilf anderen Geeks.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.