Menu

C++-Syntax: Anweisungen, Semikolons, geschweifte Klammern und main()

Die grundlegenden Syntaxregeln eines C++-Programms - Anweisungen und Semikolons, Blöcke in geschweiften Klammern, die main-Funktion und wie die Ausgabe funktioniert - erklärt anhand eines ersten Programms.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

Von „es kompiliert" zu „ich kann es lesen"

Auf der vorherigen Seite hast du eine Quelldatei genommen und sie mit einem Compiler in ein laufendes Programm verwandelt. Jetzt werden wir das Tempo drosseln und uns ansehen, was eigentlich in dieser Datei stand. Jedes C++-Programm ist aus derselben Handvoll struktureller Bausteine aufgebaut, und sobald du sie benennen kannst, sieht eine unbekannte .cpp-Datei nicht mehr wie Rauschen aus.

Hier ist ein vollständiges, lauffähiges Programm. Lies es einmal, dann zerlegen wir es Zeile für Zeile.

Fünf bedeutsame Zeilen, und jede davon erfüllt eine bestimmte Aufgabe. Gehen wir sie durch.

Die #include-Zeile

#include <iostream>

Diese Zeile bindet den Header <iostream> ein, damit du Ein-/Ausgabe-Funktionen wie cout verwenden kannst. Das #include ist eine Präprozessor-Direktive - sie läuft vor der eigentlichen Kompilierung und fügt im Grunde den Inhalt dieses Headers in deine Datei ein.

Zwei Dinge machen #include-Zeilen besonders:

  • Sie beginnen mit #, was sie als Präprozessor-Direktiven kennzeichnet.
  • Sie enden nicht mit einem Semikolon. Das ist die eine gängige Ausnahme von der Gewohnheit „jede Zeile endet mit ;", die du dir gerade aneignest.

Wenn du cout verwendest, aber #include <iostream> vergisst, weiß der Compiler nicht, was cout ist, und du bekommst einen Fehler wie 'cout' was not declared in this scope. Die Lösung ist fast immer ein fehlendes Include.

Die main-Funktion

int main() {
    // ...
    return 0;
}

main ist der Ort, an dem dein Programm beginnt. Wenn du das kompilierte Programm ausführst, startet die Ausführung bei der ersten Zeile innerhalb von main und stoppt, wenn main zurückkehrt. Jedes C++-Programm hat genau ein main - nicht mehr, nicht weniger.

Die Bestandteile:

  • int - main gibt eine ganze Zahl an das Betriebssystem zurück. Per Konvention bedeutet 0 „erfolgreich beendet".
  • main() - der Name, gefolgt von Klammern für seine Parameter (hier leer).
  • { ... } - die geschweiften Klammern umschließen den Rumpf: die Anweisungen, die ausgeführt werden.
  • return 0; - beendet main und meldet Erfolg. Wenn du es weglässt, behandelt C++ main, als hätte es 0 für dich zurückgegeben - aber es zu schreiben macht deine Absicht deutlich.

Anweisungen und das Semikolon

Eine Anweisung ist eine vollständige Instruktion. In C++ endet jede Anweisung mit einem Semikolon:

C++ ignoriert Zeilenumbrüche und zusätzliche Leerzeichen vollständig. Dem Compiler ist es egal, ob du die Anweisungen in eine Zeile oder in zehn schreibst - das ; sagt ihm, wo jede Anweisung endet. Alle drei sind für den Compiler identisch:

int a = 1; int b = 2;
int a = 1;
    int b = 2;
int
a
= 1;

Diese Freiheit bringt die häufigste Anfängerfalle mit sich: ein vergessenes Semikolon. Sieh dir an, was hier passiert.

int x = 5    // <-- kein Semikolon
int y = 10;

Du bekommst einen Fehler wie expected ';' before 'int'. Beachte den Haken: Der Compiler merkt erst, dass etwas nicht stimmt, wenn er die nächste Zeile erreicht, deshalb zeigt die gemeldete Zeilennummer oft eine Zeile unter dem eigentlichen Fehler. Wenn ein Fehler ein fehlendes ; erwähnt, prüfe die Zeile über der in der Meldung.

Geschweifte Klammern definieren Blöcke

Wo manche Sprachen Einrückung verwenden, um Code zu gruppieren, verwendet C++ geschweifte Klammern { }. Alles zwischen einem zusammengehörigen Klammernpaar ist ein Block. Funktionsrümpfe, Schleifen und if-Anweisungen verwenden sie:

Die beiden Zeilen innerhalb der Klammern des if laufen nur, wenn die Bedingung wahr ist. Das letzte cout steht außerhalb der Klammern, läuft also immer.

Weil geschweifte Klammern - nicht die Einrückung - die Struktur definieren, zwingt dich C++ nicht zum Einrücken. Aber du solltest es trotzdem tun: Einrückung ist die Art, wie Menschen die Struktur lesen, die die Klammern definieren. Ein häufiger Bug ist eine ungepaarte Klammer - jede { braucht ein schließendes }. Wenn du eine vergisst, meldet der Compiler den Fehler meist nahe am Ende der Datei (expected '}' at end of input), weit entfernt von der Stelle, an der du dich tatsächlich verheddert hast. Deine Klammern zu zählen oder sie von deinem Editor zuordnen zu lassen, erspart viel Verwirrung.

Ausgabe mit cout und <<

Du hast cout jetzt schon ein paar Mal gesehen. Es ist der Standard-Ausgabestrom, und du sendest ihm Werte mit dem Operator << (lies ihn als „setze dies in die Ausgabe"):

Du kannst << verketten, um mehrere Dinge nacheinander auszugeben. endl beendet die Zeile (es leert auch den Puffer); die Escape-Sequenz "\n" ist eine leichtgewichtigere Art, einen Zeilenumbruch auszugeben. Für einfache Programme ist beides in Ordnung.

Zu dem using namespace std; ganz oben: Namen aus der Standardbibliothek leben im Namespace std, der vollständige Name ist also std::cout. Einmal using namespace std; zu schreiben, erlaubt dir, das Präfix std:: wegzulassen und nur cout zu schreiben. Das ist in kurzen Beispielen praktisch, aber in größeren Projekten bevorzugen viele Teams das explizite std::cout, um Namenskollisionen zu vermeiden - sei also nicht überrascht, es in beiden Formen zu sehen.

Du kannst jetzt das Grundgerüst jedes Programms lesen

Includes oben, eine main-Funktion als Einstiegspunkt, Anweisungen, die mit Semikolons enden, Klammern, die Code in Blöcke gruppieren, und cout << für die Ausgabe - dieses Grundgerüst steckt in nahezu jeder C++-Datei, die du jemals öffnen wirst. Der Rest der Sprache ist Detail, das auf diese wenigen Formen aufgesetzt ist. Wenn ein Programm einschüchternd wirkt, suche zuerst main, dann lies die Anweisungen der Reihe nach; die Struktur wird dich leiten.

Als Nächstes: Kommentare

Im Moment ist jede Zeile in deinen Programmen Code, den der Compiler liest. Als Nächstes fügen wir Zeilen hinzu, die er absichtlich ignoriert - Kommentare - damit du Notizen für dich selbst und andere Leser hinterlassen kannst. Du wirst die einzeilige Form // und die Blockform /* ... */ sehen, sowie wann jede die richtige Wahl ist.

Häufig gestellte Fragen

Warum braucht jede C++-Anweisung ein Semikolon?

C++ ignoriert Zeilenumbrüche und Leerzeichen, deshalb braucht es eine ausdrückliche Markierung dafür, wo eine Anweisung endet und die nächste beginnt. Diese Markierung ist das Semikolon ;. Ein fehlendes Semikolon ist der mit Abstand häufigste Kompilierfehler bei Anfängern - und die gemeldete Zeilennummer zeigt oft auf die Zeile nach derjenigen, in der es fehlt.

Was macht int main() in C++?

main ist die Funktion, mit der das Programm zu laufen beginnt - die Ausführung startet in ihrer ersten Zeile und endet, wenn sie zurückkehrt. Jedes C++-Programm braucht genau ein main. Das int bedeutet, dass es einen ganzzahligen Statuscode an das Betriebssystem zurückgibt, wobei 0 per Konvention Erfolg signalisiert.

Muss ich std:: vor cout schreiben?

Du schreibst entweder std::cout (voll qualifiziert) oder fügst einmal oben using namespace std; hinzu und schreibst dann nur noch cout. Die qualifizierte Form ist in größeren Dateien sicherer; using namespace std; ist eine gängige Abkürzung in kleinen Beispielen und Tutorials.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S