Literale und Präprozessor
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:
| Art | Beispiel | Bedeutung |
|---|---|---|
| Ganzzahlliteral | 42 | ganze Zahl |
| Gleitkommaliteral | 3.14 | Kommazahl |
| Zeichenliteral | 'A' | einzelnes Zeichen |
| Zeichenkettenliteral | "Text" | String |
| Aufzählungswert | RED | Wert aus einem enum |
Zahlenformen
Ganzzahlen können in C unterschiedlich notiert werden.
| Schreibweise | Beispiel | Bedeutung |
|---|---|---|
| dezimal | 42 | normale Zehnerschreibweise |
| oktal | 052 | Basis 8, beginnt mit 0 |
| hexadezimal | 0x2A | Basis 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