Zeichen

Der Programmtext (Code) von C wird in einfache Textdateien (ASCII-Dateien) geschrieben. Es genügen weniger als 100 Zeichen, um die Sprache vollständig abzudecken. Viele Zeichen werden dabei für verschiedene Elemente gleichzeitig benutzt. Die Verwendung der Zeichen ist hier aufgelistet.

Druckbare Zeichen

' ' Einfache Anführungszeichen, auch Apostroph oder im Englischen auch Single Quote genannt. Treten im Programmtext immer paarweise auf.

" " Doppelte Anführungszeichen, im Englischen auch Quotation Mark genannt. Treten im Programmtext immer paarweise auf.

+ Plus-Zeichen. Schweizerflagge und First-Aid-Kits in Computerspielen.

- Minus sign. Minus-Zeichen oder Bindestrich, im Englischen auch Hyphen genannt.

* Multiplikations-Zeichen, auch Sternchen oder im Englischen Asterisk genannt.

/ Divisions-Zeichen, auch Slash genannt.

% Prozent-Zeichen.

= Gleich-Zeichen.

() Runde Klammern. Im Englischen korrekterweise Parentheses genannt, jedoch umgangssprachlich Brackets. Treten im Programmtext immer paarweise auf. Die Klammerung muss wohlgeformt sein, was bedeutet, dass eine eindeutige nächste öffnende Klammer ( vor jeder schliessenden Klammer ) kommen muss.

[] Eckige Klammern. Im Englischen Square Brackets genannt. Treten im Programmtext immer paarweise auf. Die Klammerung muss wohlgeformt sein, was bedeutet, dass eine eindeutige nächste öffnende Klammer [ vor jeder schliessenden Klammer ] kommen muss.

{} Geschweifte Klammern. Im Englischen Curly Brackets genannt. Treten im Programmtext immer paarweise auf. Die Klammerung muss wohlgeformt sein, was bedeutet, dass eine eindeutige nächste öffnende Klammer { vor jeder schliessenden Klammer } kommen muss.

< Kleiner-Zeichen.

> Grösser-Zeichen.

; Semikolon-Zeichen. Auch Strichpunkt genannt.

: Kolon-Zeichen. Auch Doppelpunkt genannt.

, Komma-Zeichen.

. Punkt-Zeichen.

! Ausrufe-Zeichen.

? Fragezeichen.

~ Tilde-Zeichen.

^ Hoch-Zeichen. Auch Dach genannt.

| Senkrechtstrich-Zeichen.

& Und-Zeichen. Auch Kaufmanns-Und genannt.

\ Backslash-Zeichen.

# Nummern-Zeichen. Im Englischen auch Hash genannt.

Space, Tab, Enter. Allgemein als Leerzeichen (auf Englisch Whitespaces) bezeichnet. Wird im Sourcecode benutyt, um individuelle Elemente voneinander zu trennen und den code klarer zu strukturieren.

_ Underscore-Zeichen. Das Underscore-Zeichen wird in C und C++ als zusätzlicher Buchstabe angesehen. Es ist somit möglich, beispielsweise eine Variable mit dem Namen _meine_variable zu deklarieren. Sehr häufig werden compiler- oder architekturabhängige Makros mit einem oder zwei (ganz selten mit drei) vorgehängten Underscores definiert (Beispielsweise _T_SIZE oder __restrict__). Eine häufig gesehene Konvention ist auch, dass private Felder von Klassen mit dem Underscore beginnen. Da das Underscore-Zeichen einen fast unsichtbaren Strich darstellt, wird es gerne verwendet, um Namen bestehend aus mehreren Wörtern visuell lesbarer zu machen.

$ Dollar-Zeichen. Das Dollar-Zeichen hat in C und C++ keine besondere Bedeutung sondern wird als zusätzlicher Buchstabe angesehen. Es ist somit möglich, beispielsweise eine Variable mit dem Namen $die$super$variable zu deklarieren. Nach allgemeinem Bewusstsein wird dies jedoch heutzutage nicht mehr verwendet.

@ At-Zeichen. Auch Klammeraffe oder Wirbelzeichen genannt. Hat in C und C++ keine Bedeutung. Andere Sprachen erlauben dieses Zeichen als zusätzlichen Buchstaben, in C und C++ ergibt dies Syntax-Fehler. In Objective-C (was hier nicht weiter ausgeführt wird) wird dieses Zeichen verwendet, um Konstruktoren von gewissen Klassen einfacher anzusprechen sowie Prototypen anzugeben. Einige Compiler/Linker von C und C++ jedoch verwendet das Zeichen für Name-Mangling, genauer als Kennzeichnung des Namens mit dem zu einem Typ zugeordneten Attribut.

` Akzent-Zeichen. Hat in C und C++ keine Bedeutung. Jedes Auftreten wird als Syntax-Fehler angesehen.

Ziffern und Buchstaben

0-9. Die arabischen Ziffern 0 bis 9 werden hautpsächlich für feste Werte (Literale) verwendet, wie Integer-Zahlen oder Fliesskomma-Zahlen. Ziffern können jedoch auch als Teil eines benutzerdefinierten Namens auftreten, solange sie nicht an erster Stelle des Namens stehen. Somit ist es beispielsweise möglich, Variablen zu deklarieren mit Namen vec1, image5x5 oder m29513, nicht aber 99bottlesbeer.

a-z A-Z. Die lateinischen Klein- und Grossbuchstaben werden hauptsächlich für Symbole verwendet, also beispielsweise für Variablennamen oder Funktionsnamen. Einige Buchstaben haben jedoch je nach Situation eine spezielle Bedeutung, welche weiter unten genauer aufgelistet ist.

0x 0X h. Eine Null gefolgt von einem kleinen oder grossen x wird als das Prefix einer Hexadezimalzahl aufgefasst. Manche Compiler erkennen sogar ein kleines h am Ende einer Ganzzahl als solcehs. Das Suffix ist jedoch nicht gemäss Standard und sollte in portablem Code nicht verwendet werden.

a-f A-F. Die kleinen oder grossen Buchstaben a bis f werden bei Hexadezimalzahlen als die Werte 10 bis 15 aufgefasst.

0b 0B b. Eine Null gefolgt von einem kleinen oder grossen b wird von einigen wenigen Compilern als das Prefix einer Binärzahl aufgefasst. Manche Compiler erkennen sogar ein kleines b am Ende einer Ganzzahl als solcehs. Sowohl das Suffix als auch das Prefix sind jedoch nicht gemäss Standard und sollten in portablem Code nicht verwendet werden.

e E. Ein kleines oder grosses e wird als Einleitung des Exponenten einer Fliesskomma-Zahl aufgefasst.

p P. Ein kleines oder grosses p wird als Einleitung des Zweierexponenten einer Hexadezimalen Fliesskomma-Zahl aufgefasst.

f F. Ein kleines oder grosses f wird als das Suffix einer float-Fliesskommazahl aufgefasst.

l L. Ein kleines oder grosses l wird als das Suffix für eine grosse Zahl aufgefasst. Es deklariert entweder einen long int Type oder einen long double Type.

ll LL. Ein doppeltes kleines oder grosses llwird als das Suffix für eine sehr grosse Zahl aufgefasst. Es deklariert einen long long int Type.

u U. Ein kleines oder grosses u wird als das Suffix einer positiven Ganzzahl (unsigned) aufgefasst.

Steuerzeichen

Folgende Zeichen sind nicht als eigentliche Zeichen aufzufassen, die auf dem Bildschirm sichtbar sind, sondern als codierte Anweisungen.

\0. Das ASCII-Zeichen 0 wird mit Null bezeichnet und wird in C insbesondere für den Abschluss von Strings benötigt. Es wird implizit ans Ende von festen String-Werten angehängt. Um das Zeichen in C als ASCII-Zeichen zu verwenden, muss es mittels der Escape-Sequenz \0 geschrieben werden.

\a. Das ASCII-Zeichen 7 wird mit Alert bezeichnet. In früheren Jahren konnte bei Ausgabe dieses Zeichens ein Signalton ertönen, weswegen das Zeichen manchmal auch Bell (Glocke) genannt wird. Heute hat das Zeichen keine besondere Bedeutung mehr. Um das Zeichen in C als ASCII-Zeichen zu verwenden, muss es mittels der Escape-Sequenz \a geschrieben werden.

\b. Das ASCII-Zeichen 8 wird mit Backspace bezeichnet und entspricht dem Drücken der Backspace-Taste, was besonders bei Tastatureingaben nützlich sein kann. Heute wird das Zeichen kaum mehr benutzt. Um das Zeichen in C als ASCII-Zeichen zu verwenden, muss es mittels der Escape-Sequenz \b geschrieben werden.

\t. Das ASCII-Zeichen 9 wird mit Tab bezeichnet und entspricht dem Drücken der Tabulator-Taste, was für String-Formatierung, aber auch bei Tastatureingaben nützlich sein kann. Das Auftreten des Tabulator-Zeichens im Programmtext wird als ein Whitespace aufgefasst. Um das Zeichen in C als ASCII-Zeichen zu verwenden, muss es mittels der Escape-Sequenz \t geschrieben werden.

\n. Das ASCII-Zeichen 10 (Hexadezimal 0x0a) wird mit Newline bezeichnet und entspricht (je nach System: Unix: \n Windows: \r\n Mac: \r) dem Drücken der Enter-Taste, was für String-Formatierung, aber auch bei Tastatureingaben nützlich sein kann. Das Auftreten des Newline-Zeichens im Programmtext wird als ein Whitespace aufgefasst. Um das Zeichen in C als ASCII-Zeichen zu verwenden, muss es mittels der Escape-Sequenz \n geschrieben werden.

\v. Das ASCII-Zeichen 11 (Hexadezimal 0x0b) wird mit Vertical feed bezeichnet und wurde in früheren Jahren zur Steuerung von Line-Devices (Beispielsweise Zeilen-Drucker) verwendet. Heute hat das Zeichen keine besondere Bedeutung mehr. Um das Zeichen in C als ASCII-Zeichen zu verwenden, muss es mittels der Escape-Sequenz \v geschrieben werden.

\f. Das ASCII-Zeichen 12 (Hexadezimal 0x0c) wird mit Form feed bezeichnet und wurde in früheren Jahren zur Steuerung von Line-Devices (Beispielsweise Zeilen-Drucker) verwendet. Heute hat das Zeichen keine besondere Bedeutung mehr. Um das Zeichen in C als ASCII-Zeichen zu verwenden, muss es mittels der Escape-Sequenz \f geschrieben werden.

\r. Das ASCII-Zeichen 13 (Hexadezimal 0x0d) wird mit Carriage return (Wagenrücklauf) bezeichnet und entspricht (je nach System: Unix: \n Windows: \r\n Mac: \r) dem Drücken der Enter-Taste, was für String-Formatierung, aber auch bei Tastatureingaben nützlich sein kann. Das Auftreten des Carriage-Return-Zeichens im Programmtext wird als ein Whitespace aufgefasst. Um das Zeichen in C als ASCII-Zeichen zu verwenden, muss es mittels der Escape-Sequenz \r geschrieben werden.

Trigraphen, Digraphen und <iso646.h>

Viele Annahmen, die heute ganz selbstverständlich sind, konnten zu früheren Zeiten noch nicht gemacht werden. Beispielsweise war es nicht gewährleistet, dass alle oben aufgeführten Zeichen von damaligen Compilern (für C wie auch für andere Sprachen) erkannt werden konnten. Während heutige Compiler normalerweise 7-Bit-ASCII oder noch höhere Codierungen ohne Probleme erkennen, wurde die Sprache C ursprünglich auf einem stark verminderten Zeichen-Set basiert, dem sogenannten Invariant Code Set (ISO/IEC 646). So hat die Sprache C für gewisse obenstehende Zeichen einfach Umschreibungen mittels drei (Trigraph) oder zwei (Digraph) Zeichen eingebaut, sowie einen Standard-Header iso646.h mit Makro-Definitionen festgelegt, um ältere Compiler besser zu unterstützen, sowie den Umstieg von anderen Sprachen zu erleichtern.

All diese Ersetzungen wurden im Laufe der Standartisierung sukzessive eingebaut, sind heutzutage jedoch nur noch ein Relikt aus früheren Zeiten. Dennoch sind sie der Vollständigkeit halber unten aufgeführt.

Trigraphen bezeichneten Ersetzungen von bestimmten Zeichen innerhalb des gesamten Codes. Das Auftreten eines Trigraphen (egal ob innerhalb eines Strings oder nicht) hat EXAKT dieselbe Bedeutung wie das Auftreten des entsprechenden Zeichens.

Digraphen bezeichneten Ersetzungen von bestimmten Zeichen, welche im Programmtext vorkommen. Treten die Digraphen als Teil eines Strings innerhalb doppelter Anführungszeichen oder als Teil eines multy-Byte-Characters in einfachen Anführungszeichen auf, so werden sie NICHT ersetzt. Das Auftreten eines Digraphen im Programmtext hat EXAKT dieselbe Bedeutung wie das Auftreten des entsprechenden Zeichens.

Die Ersetzungen im Standard-Header iso646.h werden für Operatoren verwendet. Es handelt sich hierbei um ganz normale Makros welche den üblichen Regeln des Preprozessors folgen.

+-----------------+
|   Trigraphen    |
+---------+-------+
|   ??(   |   [   |
|   ??)   |   ]   |
|   ??<   |   {   |
|   ??>   |   }   |
|   ??=   |   #   |
|   ??!   |   |   |
|   ??'   |   ^   |
|   ??-   |   ~   |
|   ??/   |   \   |
+---------+-------+
+----------------+
|   Digraphen    |
+--------+-------+
|   <:   |   [   |
|   :>   |   ]   |
|   <%   |   {   |
|   %>   |   }   |
|   %:   |   #   |
+--------+-------+
+---------------------+
|     <iso646.h>      |
+------------+--------+
|   and      |   &&   |
|   and_eq   |   &=   |
|   bitand   |   &    |
|   bitor    |   |    |
|   compl    |   ~    |
|   not      |   !    |
|   not_eq   |   !=   |
|   or       |   ||   |
|   or_eq    |   |=   |
|   xor      |   ^    |
|   xor_eq   |   ^    |
+------------+--------+

Von einem Gebrauch solcher Ersetzungen ist heutzutage abzuraten.

Nächstes Kapitel: Feste Werte, Literale