Inhaltsverzeichnis
Sprachkern
Ein Programmierer darf durchaus erwarten,
dass er die gesamte Sprache kennt, versteht und regelmäßig nutzt.— Brian Kernighan & Dennis Ritchie : Programmieren in C
Quelltextbausteine
Ein Programm kann aus mehreren Quelltexten (Module) bestehen.
Ein (korrekter) Quelltext ist eine Folge von
Deklarationen
und Definitionen.
Die Syntax
(Grammatik) legt fest, welche Quelltexte korrekt (wohlgeformt) sind.
Einzelne Zeichen
("Alphabet")
und Gruppen von Zeichen bilden Symbole (lexikalische Einheiten).
Beim Erkennen von Symbolen wird stets
die maximal mögliche Länge des Symbols verarbeitet. So wird
x+++++y
als x ++ ++ + y
zerlegt
(was dann zu einem syntaktischen Fehler führt)
und nicht als das auch mögliche x ++ + ++ y
.
Dies ist einer der seltenen Fälle, in denen Leerräume (white spaces)
eine sprachliche Bedeutung haben.
Ansonsten ist der Quelltext frei formatierbar.
Einrückungen und Leerzeilen gliedern den Quelltext optisch.
Zeichen
Unabhängig von der internen Darstellung besteht ein Quelltext aus den Buchstaben
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z _ a b c d e f g h i j k l m n o p q r s t u v w x y z
(der Unterstrich _
gilt als Buchstabe), den Ziffern
0 1 2 3 4 5 6 7 8 9
und den Sonderzeichen
+ - * / % ? : = [ ] ( ) { } , . < > ! | & ~ ^ # ' " \
Leerzeichen, Tabulatoren und Zeilenumbrüche ("white spaces") gliedern den Quelltext.
Namen
Namen (Bezeichner) beginnen mit einem Buchstaben, darauf können beliebig viele Buchstaben oder Ziffern folgen. Groß- und kleinschreibung wird unterschieden. Schlüsselwörter sind reservierte Namen mit vordefinierter Bedeutung.
Literale
Zahlen
Zahlkonstanten beginnen mit einer Ziffer. Ganzzahlen können dezimal, oktal oder hexadezimal angegeben werden:
Basis | Ziffern | Anfangszeichen | |
127 | 10 | 0…9 | keine 0 (bei mehrziffrigen Zahlen) |
0177 | 8 | 0…7 | 0 |
0x7F | 16 | 0…9, A…F, a…f | 0x |
C++14 erlaubt Binärzahlen 0b101010
und Stellentrennzeichen 1'234'567
.
Dezimalzahlen können ein Vorzeichen haben.
Durch Anfügen des Buchstabens l
oder L
erhält die Konstante den Typ long int
.
Ein u
oder U
am Ende markiert die Zahl als vorzeichenlos
(unsigned
).
65 255 65535 4294967295U 0x41 255U 65535L -1UL
Gleitkommazahlen enthalten einen Dezimalpunkt oder einen Exponenten.
Sie haben den Typ double
.
Mit f
oder F
am Ende wird der Typ float
,
mit l
oder L
wird long double
erzwungen.
123.0 0.123 1.602e-19f 123. .123 2999792.458E+8L
Zeichen und Zeichenketten
Apostrophe (einfache Anführungsstriche) umschließen Zeichenkonstanten 'a
'.
Zeichenketten beginnen und enden mit doppelten Anführungsstrichen ("Gänsefüßchen").
In Zeichenketten darf kein Zeilenende auftreten.
Aufeinanderfolgende, höchstens durch white spaces getrennte Zeichenketten
werden zu einer verschmolzen:
"Das ist eine " "Zeichenkette"
Durch vorangestelltes l
oder L
erfolgt die Codierung als "wide character"
L'x'
für Plattformen mit erweiterten Zeichensätzen.
Einige Zeichen müssen durch Kombination mit dem fallenden Schrägstrich (backslash) gebildet werden (Escape-Sequenzen):
\a | alert | Warnsignal (Piepton) |
\b | backspace | ein Zeichen zurück |
\f | form feed | Blattvorschub (bei Druckern) |
\n | new line | Zeilenumbruch |
\r | carriage return | zum Zeilenanfang (ohne Zeilenvorschub) |
\t | tab | zur nächsten Tabulatorposition |
\\ | backslash | druckt \ |
\v | vertical tab | zur nächsten Zeile (ohne Rücklauf) |
\ ' | quote | Apostroph |
\" | double quote | Gänsefüßchen |
\0 | nul | Endekennung von Zeichenketten |
\ooo | octal value | Zeichenwert (1..3 Oktalziffern) |
\xhh | hex value | Zeichenwert (1..3 Hexziffern) |
\uhhhh | wide char | Unicode-Zeichen (wchar_t ) |
\Uhhhhhhhh | mit 4 oder 8 Hexziffern |
Bei einem raw string R"(...)"
werden keine Ersetzungen mit dem Backslash durchgeführt.
Der eigentliche Inhalt kann durch eine Begrenzerfolge außerhalb der runden Klammern eingeschlossen werden: R"**(...)**"
.
Kommentare
Kommentare werden bei der Programmübersetzung ignoriert. Sie sind nur zur menschlichen Kommunikation bestimmt.
C-Kommentare
/* Computer sind doof */
beginnen und enden mit Schrägstrich und Stern und sind nicht schachtelbar. Sie können sich über mehrere Zeilen erstrecken (Kommentarblock).
C++-Kommentare
// gelten bis zum Zeilenende.
Syntaktische Einheiten
Ausdrücke und Anweisungen
Anweisungen
werden mit einem Semikolon ;
abgeschlossen.
Was vor dem Semikolon steht, heißt Ausdruck
(der auch leer sein kann).
Ausdrücke sind u.a. Deklarationen,
Funktionsaufrufe,
Zuweisungen,
Konstanten, Namen
und durch Operatoren verbundene Ausdrücke.
double const pi = 4*atan(1.0);
Blöcke
Geschweifte Klammern { }
umschließen
Blöcke
(Deklarations- oder Anweisungsfolgen).
Blöcke sind ineinander schachtelbar oder können auch leer sein.
Jeder Funktionsrumpf ist ein Block.
Präprozessoranweisungen
Doppelkreuze #
am Zeilenanfang leiten Anweisungen
für den Präprozessor
ein.
Sie gehören genaugenommen nicht zur Sprache,
jedoch kommt kein ernsthaftes Programm ohne sie aus,
weil Header der Standardbibliothek
eingebunden werden müssen
(Übersetzungsprozess).
#include <iostream> // Ein-/Ausgabe #include <cmath> // mathematische Funktionen