Skip to content

Preprocessor und Compiler

Preprocessor

Der Preprocessor ist eine Textmaschine, welche Text ersetzten, einfügen und löschen kann.

Wenn man den Output nach den Preprocesser sehen möchte, kann man dies mit: gcc -E <path>

#define und #undef

Mit #define VARNAME <value> kann eine Konstante definiert werden, welche vom Preprocessor ersetzt wird.

Mit #undef VARNAME kann eine Konstante wieder gelöscht werden

Mit gcc -DVARNAME kann eine Konstante definiert werden. Dies kann hilfreich für die #ifdef Anweisungen sein.

#include

  • #include <header.h> importiert ein Headerfile, welches mit dem Compiler mit kommt, bzw. beim OS installiert sind
  • #include "header.h" importiert ein Headerfile, welches im selbe Verzeichnis, wie das File, in welchem die Anweisung steht.

#if, #elif, #else, endif, #ifdef und #ifndef

Mit diesen Anweissungen kann gewissen Code beim Kompilieren ignoriert werden.

Beim folgenden Beispiel wird der Debugging Output nur ausgegeben, wenn DEBUG definiert ist. Die selbe Anweissung könne man auch mit #ifdef DEBUG schreiben.

#if defined DEBUG
    printf("Program Version 1 (Debugging)\n");
#else
    printf("Programm Version 1 (Production)\n");
#endif

Mit gcc -DVARNAME kann eine Konstante definiert werden.

Compiler

Es kann nur den Compiler (und Preprocessor) mit gcc -c <path_to_file> aufgerufen werden. Dies produziert ein *.o File. In diesem gibt es noch Referenzen zu anderen Modulen und Files.

Linker

Der Linker kombiniert alle *.o Files in eine ausführbare Datei und löst die Referenzen im *.o File aufzulösen. Wenn gcc mit *.o Files aufgerufen wird, wird der Linker benützt (Befehl gcc *.o).