Der vom C-Compiler verwendete Zeichensatz besteht aus einem großen
Teil des erweiterten ASCII-Zeichensatzes. Allerdings dürfen nicht
alle Zeichen uneingeschränkt benutzt werden, da jedes Zeichen für
den Compiler eine bestimmte Bedeutung hat. Der gesamte Zeichensatz darf
deshalb nur in Zeichenketten oder Kommentaren verwendet werden.
Bei der Verwendung der Zeichen ist zu beachten, dass C zwischen
der Groß- und Kleinschreibung unterscheidet. Im folgenden ist der
C-Zeichensatz zusammengestellt:
Buchstaben : A ... Z und a ... z
Ziffern : 0 1 2 3 4 5 6 7 8 9
Unterstrich : _
Interpunktion : ! " # % & ' ( ) * + , - . / : ; < =
> ? [ \ ] ^ { | } ~
Steuerzeichen Escape-Sequenz Bedeutung
" \"
' \' Nehmen der Sonderbedeutung dieser Zeichen
? \?
\ \\
space Zwischenraum leer lassen (space)
BEL \a akustisches Signal (bell)
BS \b ein Zeichen zurück (backspace)
FF \f neue Seite (formfeed)
NL \n neue Zeile (new line)
CR \r Wagenrücklauf (carriage return)
HT \t horizontaler Tabulator (horizontal tab)
VT \v vertikaler Tabulator (vertical tab)
Mit "\d", "\dd" oder "\ddd" kann jedes beliebige Zeichen als ein-, zwei- oder dreistellige Oktalzahl dargestellt werden.
Durch "\xh", "\xhh", "\xhhh" ... können beliebig lange Escape-Folgen in hexadezimaler Form dargestellt werden.
Manche Zeichen, die eventuell nicht auf der Tastatur verfügbar
sind, können durch sogenannte Trigraph-Zeichen dargestellt werden
(Ersatzdarstellung).
Zeichen Trigraph Zeichen Trigraph
______________________________________________________________
[ ??( { ??<
\ ??/ | ??!
] ??) } ??>
^ ??' ~ ??-
# ??=
2.2 Token (sinntragende
Teile)
Bezeichner (Namenskonventionen)
Bezeichner sind Namen für Variablen, Funktionen und Marken, die
in einem Programm verwendet werden. Sie werden für Funktionen und
Variablen deklariert.
Bezeichner bestehen aus Buchstaben, Ziffern und Unterstrichen. Die Länge
der Bezeichner hängt dabei vom verwendeten Compiler ab. Während
alte Compiler nur 8 Zeichen unterscheiden können, sind moderne Compiler
schon in der Lage, bis zu 31 Zeichen zu unterscheiden. Alle Zeichen die
danach folgen, lassen keine weitere Differenzierung mehr zu.
Für die Bildung von Bezeichnern gelten folgende Regeln:
Beispiele für gültige Bezeichner: a, z, z_2
variable
VARIABLE
Variable
Beispiele für ungültige Bezeichner: goto
_variable
123_Zahl
wert 1
wert.2
Weitere Beispiele: Das_ist_ein_langer_Variablenname_1
Das_ist_ein_langer_Variablenname_2
Im letzten Beispiel stehen zwar zwei Bezeichner, die sich in einem Zeichen
unterscheiden, allerdings ist die Anzahl der signifikanten Stellen überschritten.
Für den Compiler handelt es sich deshalb um ein und dieselbe Variable.
Schlüsselwörter
Bei den Schlüsselwörtern handelt es sich um vordefinierte
Namen mit besonderer Bedeutung. Sie dürfen, wie im vorangegangenen
Kapitel schon erwähnt, nicht als Bezeichner für Variablen benutzt
werden, da sie für das System reserviert sind.
Insgesamt sind in ANSI-C 32 Schlüsselwörter enthalten. Im
Anhang unter 8.1 sind alle Schlüsselwörter von ANSI-C aufgeführt.
In verschiedenen Compilern können es noch einige Schlüsselwörter
mehr sein.
Kommentare
Kommentare sind Texteile eines Programms, die vom Compiler ignoriert werden. Zu diesem Zweck werden sie von den Zeichen /* und */ eingeschlossen. Kommentare können an beliebiger Stelle im Quellcode stehen. Sie können sich auf eine Programmzeile beschränken oder sich über mehrere erstrecken.
Die Verwendung von Kommentaren beeinflusst die Laufzeit eines compilierten
Programms nicht.
Beispiel: /* Das ist eine Kommentarzeile.
*/
/* Dieser Kommentar erstreckt sich über mehrere
Zeilen. Wird das Kommentarendezeichen
vergessen, kann es zu Problemen führen. */
Trennungen
Bei der Umwandlung wird ein Quellprogramm durch den Compiler in kleine
Gruppen von Zeichen, sogenannten Token, aufgebrochen. Diese Zeichen
bilden zusammen eine logische Einheit. Für den Compiler hat jedes
Token eine Bestimmte Bedeutung und wird dementsprechend interpretiert.
Beispiele für Token sind Operatoren, Bezeichner, Konstanten und
Schlüsselworte. Damit sie als Token erkannt werden können, müssen
sie von einem anderen Token durch ein Trennzeichen abgeschlossen werden.
Als Trennzeichen können verschiedene Sonderzeichen Verwendung finden.
Beispielsweise [ ], { }, ( ), < >, usw. Dabei ist das Leerzeichen das
wohl am häufigsten benutzte Trennzeichen.
Wird auf die Verwendung von Leerzeichen verzichtet, so werden die Programme
unübersichtlich und schlecht lesbar. In diesem Fall wird dann die
Ausführung der Operatoren durch ihre Priorität und die Reihenfolge
ihres Auftretens bestimmt.
Beispiel: i+++j;
Das Beispiel zeigt, dass beim Verzichten von Trennzeichen die Eindeutigkeit
verloren gehen kann. Vom Compiler wird der Ausdruck i+++j als
(i++) + (j) interpretiert, obwohl der Programmierer vielleicht die
Formel (i) + (++j) berechnen lassen wollte.
Deshalb sollten in Zweifelsfällen immer Klammern und Leerzeichen
an den entsprechenden Stellen verwendet werden.
Konstanten und Variablen
Unter einer Konstanten wird eine Zahl, ein Zeichen oder ein String verstanden.
Sie kann im Programm als feststehender Wert betrachtet werden.
In C wird dabei zwischen den folgenden Typen von Konstanten unterschieden:
Die Konstanten vom Typ char sind einzeln in Anführungszeichen
zu setzen. Unterschieden wird zwischen Zeichenkonstanten, wie z.B.
'a', 'Z', '1', und Zeichenkettenkonstanten, wie z.B. "ABC". Zeichenkonstanten
müssen in einfache Hochkommas, Zeichenkettenkonstanten in doppelte
Hochkommas gesetzt werden.
Oktale Ganzzahlkonstanten können durch Voranstellen einer
0 (Null), hexadezimale durch Voranstellen der Zeichenkombination
0x bzw. 0X dargestellt werden.
Die Darstellung von long-int- und long-float-Konstanten
wird durch Anhängen von L bzw. l, unsigned-Konstanten
durch Anhängen von U bzw. u erreicht.
Beispiel: 10 dezimal integer
017 oktal integer
0x7A hexadezimal integer
0X12L hexadezimal long integer
2.3 Blöcke,
Anweisungen und Ausdrücke
Ein C-Programm besteht aus einer Menge von Funktionen, mindestens aber aus der Funktion mit dem Namen main. Nach dem Funktionsnamen und den runden Klammern, die die Argumentliste enthält, folgt ein Block (Verbundanweisung).
Blöcke enthalten Vereinbarungen und Anweisungen. Blöcke können
auch beliebig geschachtelt werden.
Anweisungen sind Ausdrücke, die mit einem Semikolon abgeschlossen
sind.
Ein Ausdruck ist eine Folge von Operanden und Operatoren.
Operanden sind Funktionsaufrufe, Variable, Konstanten oder wiederum
Ausdrücke.
Der Ort und die Lebensdauer von Bezeichnern wird durch ihre Speicherklasse bestimmt. In C stehen dem Programmierer insgesamt 4 Speicherklassen zur Verfügung:
Variablen der Speicherklasse auto sind bei jedem lokalen Aufruf
eines Blocks vorhanden. Nach Verlassen des Blocks werden die Variablen
wieder eliminiert.
Variablen die der Speicherklasse static angehören, sind
nur lokal in einem Block vorhanden. Ihr Wert bleibt jedoch auch nach Verlassen
des Blocks erhalten.
Damit Variablen während des gesamten Programms existieren und ihre
Werte behalten, steht die Speicherklasse extern zur Verfügung.
Mit register können Variablen in den Hardwareregistern,
soweit dies möglich ist, gehalten werden. Ansonsten gilt das Gleiche
wie für die Variablen der Speicherklasse auto.
Wird die Angabe der Speicherklasse weggelassen, wird die Variable standardmäßig der Klasse auto zugeordnet.
Beispiele: int i;
auto int j;
static int e;
Das Beispiel zeigt eine Anwendung der Speicherklassen. Die Variablen
i und j werden der Speicherklasse auto
zugeordnet. Wird der Block, in dem sie definiert wurden, verlassen, verlieren
sie ihre Werte. Die Variable e dagegen behält auch nach
Verlassen des Blocks ihren Wert, da sie der Speicherklasse static
angehört.