ESP

Literale und Präprozessor

Konstanten, Zahlenformen, Zeichen, Strings, Präprozessor-Direktiven, Makros und Header-Dateien in C.

Literale und Präprozessor

Literale und der Präprozessor gehören zu den ersten Konzepten, die in C wichtig werden. Sie wirken klein, beeinflussen aber stark, wie verständlich und sicher ein Programm ist.

Literale

Ein Literal ist ein fester Wert, der direkt im Quellcode steht.

Beispiele:

42
3.14
'A'
"Hallo"

Typische Arten von Literalen:

ArtBeispielBedeutung
Ganzzahlliteral42ganze Zahl
Gleitkommaliteral3.14Kommazahl
Zeichenliteral'A'einzelnes Zeichen
Zeichenkettenliteral"Text"String
AufzählungswertREDWert aus einem enum

Zahlenformen

Ganzzahlen können in C unterschiedlich notiert werden.

SchreibweiseBeispielBedeutung
dezimal42normale Zehnerschreibweise
oktal052Basis 8, beginnt mit 0
hexadezimal0x2ABasis 16, beginnt mit 0x

Besonders die oktale Schreibweise kann zu Fehlern führen, weil eine führende Null leicht übersehen wird.

Symbolische Konstanten

Statt feste Zahlen direkt im Code zu verteilen, sind benannte Konstanten lesbarer.

#define MAX_LINES 10
#define MAX_LINE_LENGTH 30

Das ist besser als überall 10 oder 30 zu verwenden, weil sofort klarer wird, wofür die Zahl steht.

Der Präprozessor

Der Präprozessor läuft vor dem eigentlichen Compiler. Er verarbeitet Zeilen, die mit # beginnen.

Wichtige Aufgaben:

  • Header-Dateien einbinden
  • Makros ersetzen
  • bedingte Kompilierung ausführen
  • Teile des Codes vorbereiten

Typische Direktiven:

#include <stdio.h>
#define PI 3.14159
#ifdef DEBUG
#endif

Header-Dateien

Header-Dateien enthalten Deklarationen, Makros und gemeinsame Definitionen.

Beispiele:

#include <stdio.h>
#include <limits.h>
#include "mysyntax.h"

Spitze Klammern werden meistens für Systembibliotheken verwendet. Anführungszeichen werden häufig für eigene Header-Dateien verwendet.

Makros mit Vorsicht verwenden

Makros sind reine Textersetzung. Deshalb können sie unerwartete Effekte haben.

Problematisch:

#define SQUARE(x) x * x

Besser:

#define SQUARE(x) ((x) * (x))

Auch das bleibt nicht perfekt, weil Seiteneffekte wie SQUARE(i++) problematisch sind.

Beispiel: Eigene Syntax per Header

In den Unterlagen gibt es ein Beispiel, bei dem deutsche Schlüsselwörter per Header-Datei auf C abgebildet werden.

#define GANZZAHL int
#define START main()
#define SCHREIB printf(

Das ist interessant, um den Präprozessor zu verstehen. Für echten Projektcode ist klare Standardsyntax aber meist besser, weil andere Entwicklerinnen und Entwickler C-Code dadurch schneller lesen können.

Sicherheitsgedanke

Fehler in Konstanten und Makros können sich durch das ganze Programm ziehen. Deshalb gilt:

  • Konstanten eindeutig benennen
  • Makros klammern
  • Seiteneffekte vermeiden
  • Warnungen prüfen
  • bei komplexerer Logik lieber Funktionen verwenden

Merksatz

Der Präprozessor ist mächtig, aber blind. Er ersetzt Text, ohne die Absicht des Programms wirklich zu verstehen.

Zuletzt aktualisiert: 6. Juni 2026