4 Quellzeichensatz

C benötigt --wie alle anderen Sprachen auch-- zur Darstellung seiner Programme einen bestimmten Zeichensatz.

Dabei wird formal zwischen dem Zeichensatz des eigentlichen Quelltextes (source character set) und dem Zeichensatz des Rechners unterschieden, auf dem das übersetzte Programm laufen soll (target character set).

Außer bei sogenannten Crosscompilern ist diese Unterscheidung in aller Regel unwichtig.

Der Quelltext kann aus den 26 Kleinbuchstaben, den 26 Großbuchstaben (beides ohne Umlaute), den 10 Ziffern und folgenden Zeichen bestehen: !, ", #, %, &, ', (, ), *, +, -, ,, \, :, ;, <, >, =, ?, [, ], /, ^, _, {, }, |, ~

Das Leerzeichen, Horizontal- und Vertikaltabulator, sowie Seitenvorschubzeichen (form feed) können ebenfalls vorkommen und werden als sogenannte white space-Zeichen alle gleich behandelt, nämlich als Trennzeichen zwischen zusammengehörigen Zeichenfolgen (sogenannte token). Jeder Name, jeder Operator, jeder String etc. ist dabei ein solches token.

Bei den meisten Systemen zusätzlich das Dollarzeichen $ erlaubt; dies ist aber nicht portabel.

In Kommentaren sowie in Zeichen- und Stringkonstanten werden white space-Zeichen in ihrer Form nicht verändert, außerdem dürfen weitere Zeichen des Rechnerzeichensatzes enthalten sein.

Trigraphsequenzen: Normalerweise sollten die Zeichen des source character set auf jedem Rechner vorhanden sein, der nicht allzu archaisch ist.

Diese Zeichen sind alle in dem 7-Bit-ASCII-Zeichensatz enthalten. Eine kaum noch benutzte Untermenge davon, der ISO 646-1983-Zeichensatz, enthält nicht alle oben aufgeführten Zeichen. Um auch auf solchen Rechnern4 die geliebte Sprache C wenigstens notdürftig zu ermöglichen, sind die dann fehlenden Zeichen auch anders darstellbar, nämlich mit sogenannten Trigraphsequenzen. Diese Zeichenfolgen bestehen aus jeweils zwei Fragezeichen und einem weiteren Zeichen und ersetzen genau ein Zeichen des gewohnten Zeichensatzes:

Trigraphsequenz: steht für: Trigraphsequenz: steht für:
??( [ ??= #
??) ] ??/ \
??< { ??! |
??> } ??' ~


Noch vor jeder weiteren Bearbeitung (also noch vor dem Praeprozessor und dem eigentlichen Compiler) werden im Übersetzungslauf alle Trigraphsequenzen durch das entsprechende Zeichen ersetzt.

AnyWare@Wachtler.de