3.2 Symbole von C 

Wie in jeder anderen Sprache auch, gibt es in C einige gültige Symbole, die Sie kennen sollten.
3.2.1 Bezeichner 

Den Begriff Bezeichner verwendet man für Namen von Objekten im Programm. Dazu gehören Variablen, Funktionen usw.
Ein gültiger Bezeichner darf aus beliebigen Buchstaben, Ziffern und dem Zeichen _ (Unterstrich) bestehen. Allerdings darf das erste Zeichen niemals eine Ziffer sein. Beachten Sie außerdem, dass C++ zwischen Groß- und Kleinbuchstaben (englisch: case sensitive) unterscheidet. Somit sind »Hallo«, »hallo« und »HALLO« drei verschiedene Bezeichner.
Regeln für Bezeichner |
Für einen gültigen Bezeichner gibt es somit folgende Regeln:
|
3.2.2 Schlüsselwörter 

Schlüsselwörter sind Bezeichner mit einer vorgegebenen Bedeutung in C. Sie dürfen nicht anderweitig verwendet werden. So dürfen Sie beispielsweise keine Variable mit dem Bezeichner »int« verwenden, da es auch einen Basisdatentyp hierzu gibt. Der Compiler würde sich ohnehin darüber beschweren. Eine Liste der Schlüsselwörter in C finden Sie in Anhang A.3.
3.2.3 Literale 

Als Literale werden Zahlen, Zeichenketten und Wahrheitswerte im Quelltext bezeichnet, die ebenfalls nach einem bestimmten Muster aufgebaut sein müssen. Man kann auch sagen: Literale sind von einer Programmiersprache definierte Zeichenfolgen zur Darstellung der Werte von Basistypen.
Ganzzahlen
Man unterscheidet bei Ganzzahlen zwischen Dezimal-, Oktal- und Hexadezimalzahlen, für die folgende Regeln gelten:
- Dezimalzahlen (Basis 10) – Eine Dezimalzahl besteht aus einer beliebig langen Ziffernreihe aus den Zeichen 0 bis 9. Die erste Ziffer darf allerdings keine 0 sein.
- Oktalzahlen (Basis 8) – Eine Oktalzahl hingegeben beginnt immer mit einer 0, gefolgt mit einer Reihe von Oktalzahlen (0–7).
- Hexadezimalzahlen (Basis 16) – Eine Hexadezimalzahl beginnt immer mit der Sequenz 0x bzw. 0X, gefolgt von einer Reihe von Hexadezimalzahlen (0–F = 0 1 2 3 4 5 6 7 8 9 A B C D E F (oder Kleinbuchstaben: a b c d e f)).
Man kann hinter den Dezimal-, Oktal- und Hexadezimalzahlen noch ein Suffix anhängen, um den Wertebereich einer Zahl genauer zu spezifizieren. Das Suffix u bzw. U deutet beispielsweise an, dass es sich um eine vorzeichenlose (unsigned) Zahl handelt. l bzw. L gibt an, dass es sich um eine long-Zahl handelt. In Tabelle 3.3 sehen Sie einige Beispiele, wobei die Zahlen in einer Reihe immer gleichwertig sind.
Dezimalzahl | Oktalzahl | Hexadezimalzahl |
123 |
0173 |
0x7B |
1234567L |
04553207L |
0X12D687L |
66u |
0102U |
0x42u |
Fließkommazahlen
Wie eine korrekte Fließkommazahl dargestellt wird, wird in Abschnitt 5.8 genauer beschrieben, wenn es um die Basistypen von Fließkommazahlen geht. Wie bei den Ganzzahlen können Sie den Fließkommazahlen ebenfalls ein Suffix hinzufügen. Mit dem Suffix f oder F kennzeichnen Sie eine Fließkommazahl mit einer einfachen Genauigkeit. Das Suffix l oder L hingegen deutet auf eine Fließkommazahl mit erhöhter Genauigkeit hin.
Einzelne Zeichen
Ein Zeichenliteral wird zwischen einfache Hochkommata (Single Quotes) eingeschlossen ('A', 'B', 'C', ... '$', '&' usw.). Wenn Sie nichtdruckbare Zeichen wie beispielsweise einen »Tabulator« oder »Zeilenvorschub« darstellen wollen, müssen Sie eine Escape-Sequenz (auch Steuerzeichen genannt) verwenden. Escape-Sequenzen werden mit einem Backslash (\) eingeleitet (z. B. ein Tabulator = '\t' oder ein Zeilenvorschub = '\n').
Zeichenketten
Eine Zeichenkette (häufig auch String genannt) ist eine Sequenz von Zeichen, die zwischen doppelte Hochkommata (Double Quotes) gestellt werden (beispielsweise "Ich bin eine Zeichenkette"). Es ist im Zusammenhang mit einer Zeichenkette sehr wichtig zu wissen, dass jede dieser Ketten um ein Zeichen länger ist, als (sichtbar) dargestellt. Gewöhnlich werden Zeichenketten durch das Zeichen mit dem ASCII-Wert 0 (nicht der dezimalen Null) abgeschlossen (0x00 oder als einzelnes Zeichen '\0'). Diese ASCII-0 kennzeichnet immer das Ende einer Zeichenkette. Somit enthält beispielsweise die Zeichenkette "C++" vier Zeichen, weil am Ende auch das Zeichen 0x00 (oder auch '\0') abgelegt ist.
3.2.4 Einfache Begrenzer 

Um die Symbole voneinander zu trennen, benötigt man in C Begrenzer. In diesem Abschnitt wird nur auf einfache Begrenzer hingewiesen. Weitere solcher Begrenzer werden Sie im Verlauf des Buches näher kennenlernen.
Das Semikolon (;)
Der wichtigste Begrenzer dürfte das Semikolon ; (Plural: Semikola und Semikolons) sein, das auch Strichpunkt genannt wird. Es dient als Abschluss einer Anweisung. Jeder Ausdruck, der mit einem solchen Semikolon endet, wird als Anweisung behandelt. Der Compiler weiß dann, dass hier das Ende der Anweisung ist, und fährt nach der Abarbeitung der Anweisung (Befehl) mit der nächsten Zeile bzw. Anweisung fort. Natürlich hat das Semikolon keine Wirkung, wenn es in einer Stringkonstante verwendet wird:
"Hallo; Welt"
Komma
Mit dem Komma trennt man gewöhnlich die Argumente einer Funktionsparameterliste oder bei der Deklaration mehrere Variablen desselben Typs.
Geschweifte Klammern
Zwischen den geschweiften Klammern (amerikanisches Englisch: braces, britisches Englisch: curly brackets) wird der Anweisungsblock zusammengefasst. In diesem Block befinden sich alle Anweisungen (abgeschlossen mit einem Semikolon), die in einer Funktion ausgeführt werden sollen. Beispielsweise sind beim Listing hallo.c alle Anweisungen der main-Funktion zwischen den geschweiften Klammern zusammengefasst:
int main(void) { printf("Hallo Welt!"); return 0; }
Hier wird lediglich die Textfolge »Hallo Welt!« auf dem Bildschirm ausgegeben und mit return der Wert 0 an den aufrufenden Prozess zurückgegeben. Mehr zur main-Funktion und deren Rückgabewert erfahren Sie etwas später in den Abschnitten 9.16 und 9.17.
Das Gleichheitszeichen (=)
Mit dem Gleichheitszeichen trennt man die Variablendeklaration von den Initialisierungslisten:
Typ bezeichner = wert;
Hinweis |
Wenn Sie eine Variable initialisieren, so ist dies noch lange keine Zuweisung. Ist das nicht ein und dasselbe? Nicht ganz, zwar erfolgen die Zuweisung und die Initialisierung mit dem Gleichheitszeichen, aber zum einen handelt es sich ja hier um den Begrenzer = und zum zweiten um den Operator = – also um zwei verschiedene Dinge, die mit ein und demselben Zeichen einhergehen. Eine Initialisierung erfolgt immer erst beim Anlegen einer Variablen, während eine Zuweisung lediglich auf ein bereits existierendes Objekt ausgeführt werden kann. |
Hinweis |
Wenn Sie in einem Programm auf zwei aufeinanderfolgende == stoßen, so handelt es sich hierbei nicht mehr um eine Zuweisung, sondern um eine Prüfung. |
3.2.5 Kommentare 

Kommentare sind Textteile in einem C-Quelltext, die vom Compiler ignoriert werden. Kommentare können an einer beliebigen Stelle im Quelltext stehen. Kommentare können auf eine Programmzeile beschränkt sein oder sich über mehrere Zeilen erstrecken.
Hinweis |
Die Verwendung von Kommentaren beeinflusst weder die Laufzeit des übersetzten Programms noch dessen Größe, weil Kommentare bei der Übersetzung in Maschinencode entfernt werden. |
In den weiteren Programmen, die jetzt folgen, wird es häufiger vorkommen, dass der Quellcode dokumentiert ist, genauer gesagt, dass Kommentare eingefügt sind. Diese Kommentare werden vom Compiler ignoriert. Wie Sie Ihren Quellcode dokumentieren, bleibt letztlich Ihnen selbst überlassen. Sie können beliebig viel, alles oder auch gar nichts dokumentieren.
Wann sind Kommentare sinnvoll?
Kommentare sind eigentlich immer sinnvoll. Wenn Sie vorhaben sollten, ein größeres Projekt zu verwirklichen, kann sich dies über mehrere Monate hinausziehen. Um das Stückchen Quellcode, das Sie vor einem Monat geschrieben haben, nicht immer wieder von Neuem verstehen zu müssen, können Sie ein paar Kommentare mit Erklärungen einfügen. In einer Gruppe ist es ohnehin unerlässlich, mit Kommentaren zu arbeiten, damit jeder den Code des anderen besser versteht und nachvollziehen kann.
Hierzu ein Beispiel:
/* kommentare.c */ #include <stdio.h> int main (void) { //Beginn des Hauptprogramms int i = 10; //Variable int mit dem Namen i und Wert 10 printf("%d",i); //Gibt die Zahl 10 aus. printf("\n"); //Springt eine Zeile weiter. printf("10"); //Gibt den String "10" aus. return 0; /* Hier sehen Sie noch eine 2. Möglichkeit, Kommentare einzufügen. Dieser Kommentar wird mit einem Slash- Sternchen eröffnet und mit einem Sternchen-Slash wieder beendet. Alles dazwischen wird vom Compiler ignoriert. */ }
Kommentare sind nicht schwer zu verstehen. Sie werden einfach hinter zwei // oder zwischen /* Hier steht der Kommentar */ geschrieben.
Häufig werden Kommentare vor Funktionen geschrieben. Ein guter Stil könnte so aussehen:
/******************************
* *
* Beschreibung der Funktion *
* Parameter1 : ... *
* Parameter2 : ... *
* Rückgabewert : ... *
* *
******************************/
In den Kommentaren können Sie beliebige Zeichen verwenden, also auch deutsche Umlaute oder das Dollarzeichen.
Hinweis |
Auch wenn immer empfohlen wird, den Quellcode zu kommentieren, sollten Sie nicht den Fehler machen, jede Zeile zu kommentieren. Bei Code, der ohnehin klar ist, sollten Sie auf Kommentare verzichten. Wenn Sie versuchen, schwer verständlichen Code zu kommentieren, sollten Sie sich vielleicht überlegen, ob Sie nicht den Code vereinfachen könnten. |
Welche Kommentar-Schreibweise? – // oder /* */
Da Sie zwei Möglichkeiten haben, Kommentare zum Programm hinzuzufügen, stellt sich die Frage, welche Methode von den beiden die bessere ist. Die folgende Schreibweise wurde erst im Oktober 1999 zum C99-Standard hinzugefügt:
// Kommentar
Dieser Stil war zuvor nur für C++ erlaubt und im C89-Standard nicht zugelassen. Problematisch könnte dies werden, wenn Sie einen etwas älteren Compiler verwenden. Er würde einen solchen Kommentar als Fehler bemängeln und sich weigern, das Programm zu übersetzen.
Hinweis |
Bei DOS- oder Linux-Compilern sollten recht selten Probleme auftreten. Der CC unter IRIX z. B. verhält sich da schon ganz anders als ein üblicher GCC. |
Etwas müssen Sie außerdem noch beachten, wenn Sie die Schreibweise // verwenden. Sehen Sie sich dazu folgendes Listing an:
/* kommentare_fehler.c */ #include <stdio.h> int main(void) { //das Programm befindet sich im Pfad C:\programme\ printf("Hallo Welt\n"); return 0; }
»Hallo Welt« wird niemals ausgegeben. Der Grund dafür ist, dass die Zeile mit dem Kommentar mit einem Backslash endet. Achten Sie also darauf, dies zu vermeiden, denn die Suche nach diesem Fehler könnte unnötig Zeit kosten. Wenn Sie außerdem eine etwas höhere Warnstufe des Compilers (beispielsweise das Flag -Wall beim GCC) verwenden, wird dieser Sie auch darauf hinweisen, dass der Kommentar nicht in Ordnung ist (beispielsweise mit warning: multi-line comment).
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.