Die Verbundanweisung in C++
Eine Anweisung, die mit einer geschweiften Klammer beginnt und endet und weitere Anweisungen enthalten kann, nennt man eine Verbundanweisung (compound statement ). Das Nichtterminalsymbol der C++ -Syntax für die Verbundanweisung ist 〈compound-statement 〉 (Verbundanweisung), es hat die folgende Produktion.
- 〈compound-statement 〉::=
- "{" [〈block-item-list 〉] "}".
Das Nichtterminalsymbol 〈block-item-list 〉 soll hier nicht weiter erklärt werden. Es reicht zu sagen, daß an dieser Stelle Anweisungen stehen können.
Verbundanweisung mit einer Anweisung
Eine Verbundanweisung kann beispielsweise genau eine Anweisung enthalten, wie die Ausdruckanweisung in dem folgenden Beispiel. Die Verbundanweisung ist "{ ::std::cout << "Haus" << '\n'; }" und die enthaltene Ausdruckanweisung ist "::std::cout << "Haus" << '\n';" mit dem Ausdruck "::std::cout << "Haus" << '\n'".
verbundanweisung1.cpp#include <iostream>
#include <ostream>
int main()
{ ::std::cout << "Haus" << '\n'; }::std::coutHaus
Verbundanweisung mit mehreren Anweisungen
Eine Verbundanweisung kann auch eine Folge mehrerer Anweisungen enthalten. Diese werden dann in zeitlicher Reihenfolge hintereinander ausgeführt und zwar in derselben Reihenfolge, in der sie auch im Programmtext stehen. Wegen dieser Eigenschaft kann man sagen, daß die Verbundanweisung in C++ das Konzept der Sequenz realisiert.
verbundanweisung2.cpp#include <iostream>
#include <ostream>
int main()
{ ::std::cout << "Haus" << '\n';
::std::cout << "Hof" << '\n'; }::std::coutHaus
Hof
Verbundanweisung ohne Anweisungen
Es ist aber auch möglich, daß eine Verbundanweisung ganz leer ist, also keine weitere Anweisung enthält.
verbundanweisung0.cppint main(){}
Solch eine Verbundanweisung ist, wie das Semikolon ";" eine Schreibweise für eine Anweisung ohne Wirkung.
Kombination von Verbundanweisungen
Da eine Verbundanweisung eine Anweisung ist und eine Verbundanweisung selber wieder Anweisungen enthalten kann, kann eine Verbundanweisung auch als Anweisung in einer anderen Verbundanweisung vorkommen. So können beispielsweise zwei Verbundanweisungen sequentiell kombiniert werden: Sie werden dann in der gegebenen Reihenfolge hintereinander ausgeführt: Die Kontrolle gelangt vom Ausgang der ersten Verbundanweisung zum Eingang der zweiten.
verbundanweisung3.cpp#include <iostream>
#include <ostream>
int main()
{ { ::std::cout << "Haus" << '\n';
::std::cout << "Hof" << '\n'; }
{ ::std::cout << "Tisch" << '\n';
::std::cout << "Stuhl" << '\n'; }}::std::coutHaus
Hof
Tisch
Stuhl
Verbundanweisungen zur Strukturierung
Verbundanweisungen können zur Strukturierung (übersichtlichen Gliederung) von Programmen dienen.
In dem folgenden Programm wird durch die Verbundanweisung klargestellt, daß sich der Kommentar auf die beiden folgenden Anweisungen bezieht.
verbundanweisung4.cpp#include <iostream>
#include <ostream>
#include <cmath>
int main()
{ { // Ausgabe von Potenzen
::std::cout << ::std::pow( 10., 2. ) << ", ";
::std::cout << ::std::pow( 2., 10. ) << ". "; }
::std::cout << 10. + 2. << ", ";
::std::cout << 2. + 10. << ".\n"; }::std::cout100, 1024. 12, 12.
In dem folgenden Beispielprogramm werden Blöcke (und zwei Leerzeilen) zur übersichtlichen Gliederung von Anweisungen zur Ausgabe eines Liedtextes verwendet.
Kuckuck.cpp#include <iostream>
#include <ostream>
int main()
{
{ ::std::cout << "Auf einem Baum ein Kuckuck, -" << '\n';
{ ::std::cout << "Sim sa la dim, bam ba," << '\n';
::std::cout << "Sa la du, sa la dim -" << '\n'; }
::std::cout << "Auf einem Baum ein Kuckuck sass." << '\n'; }
{ ::std::cout << "Da kam ein junger Jaeger, -" << '\n';
{ ::std::cout << "Sim sa la dim, bam ba," << '\n';
::std::cout << "Sa la du, sa la dim -" << '\n'; }
::std::cout << "Da kam ein junger Jaegersmann." << '\n'; }
{ ::std::cout << "Der schoss den armen Kuckuck, -" << '\n';
{ ::std::cout << "Sim sa la dim, bam ba," << '\n';
::std::cout << "Sa la du, sa la dim -" << '\n'; }
::std::cout << "Der schoss den armen Kuckuck tot." << '\n'; }}::std::coutAuf einem Baum ein Kuckuck, -
Sim sa la dim, bam ba,
Sa la du, sa la dim -
Auf einem Baum ein Kuckuck sass.
Da kam ein junger Jaeger, -
Sim sa la dim, bam ba,
Sa la du, sa la dim -
Da kam ein junger Jaegersmann.
Der schoss den armen Kuckuck, -
Sim sa la dim, bam ba,
Sa la du, sa la dim -
Der schoss den armen Kuckuck tot.
Übungen
- Semikolon
- Nehmen Sie Stellung zu der folgenden, gelegentlich gehörten, Aussage: „Jede Anweisung in C++ muß mit einem Semikolon abgeschlossen werden.“
- Kommentare
- Was gibt das Programm "zwei.cpp" aus?
zwei.cpp
#include <iostream>
#include <ostream> int main()
{ ::std::cout << "one" << '\n'; /* Eins *
::std::cout << "two" << '\n'; * Zwei */ }- Kategorisieren
- Enthalten die folgenden Zeilen jeweils einen Ausdruck, eine Anweisung oder keines von beidem?
- ;
- { ; }
- 0
- 0;
- 0; 0
- 0; 0;
- { 0; 0; }
- {}
- { {} }
- {{ 0 }}
- (( 0 ))
- Debugger benutzen
- Machen Sie sich damit vertraut, wie Sie den Debugger des von Ihnen verwendeten Entwicklungssystems benutzen können, um sich den zeitlichen Ablauf einer Verbundanweisung mit mehreren Anweisungen anzeigen zu lassen und dabei Start- und Haltepunkte zu verwenden. (Nicht alle Entwicklungssysteme bieten alle dieser Möglichkeiten.)