Menu

C++ Hello World: dein erstes Programm, Zeile für Zeile

Das Hello-World-Programm in C++ Zeile für Zeile erklärt: #include <iostream>, int main(), std::cout und <<, std::endl gegen '\n', return 0, dazu wie du es kompilierst und die ersten Fehler behebst, auf die Anfänger stoßen.

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

Das Programm

Hier ist das vollständige Hello-World-Programm in C++. Drück auf Ausführen, um es im Browser zu kompilieren und auszuführen:

Es gibt eine Zeile aus:

Hello, World!

Fünf Zeilen Code, und jede hat eine bestimmte Aufgabe. Die Abschnitte unten gehen sie der Reihe nach durch und zeigen dann, wie du dieselbe Datei auf deinem eigenen Computer baust und was die ersten Compiler-Fehler meistens bedeuten.

Zeile für Zeile

#include <iostream>

Zeilen, die mit # beginnen, sind Anweisungen an den Präprozessor, der vor dem eigentlichen Compiler läuft. #include <iostream> fügt die Deklarationen aus dem Standard-Header <iostream> (Ein- und Ausgabe-Streams) ein. In diesem Header sind std::cout und std::endl deklariert. C++ hat keine eingebaute Ausgabeanweisung; die Ausgabe ist Teil der Standardbibliothek, und mit dieser Zeile holst du sie dir.

int main() {

Jedes C++-Programm beginnt mit der Ausführung in einer Funktion namens main. Es muss genau eine geben, und sie muss kleingeschrieben sein. Das int davor sagt, dass main dem Betriebssystem am Ende eine Ganzzahl zurückgibt. Die leeren Klammern bedeuten, dass sie hier keine Argumente nimmt, und die öffnende geschweifte Klammer { beginnt den Funktionsrumpf.

std::cout << "Hello, World!" << std::endl;

Diese Zeile erledigt die eigentliche Ausgabe.

  • std::cout ist der Standard-Ausgabestream, meist das Terminal. Das Präfix std:: sagt, dass cout im Namespace std liegt, in dem die gesamte Standardbibliothek untergebracht ist.
  • << ist der Einfügeoperator. Er schickt den Wert rechts von ihm in den Stream links von ihm. Du kannst ihn verketten, und jedes << hängt das nächste Stück an dieselbe Ausgabe an.
  • "Hello, World!" ist ein String-Literal: Text in doppelten Anführungszeichen.
  • std::endl beendet die Zeile.
  • Das Semikolon beendet die Anweisung. Jede Anweisung in C++ braucht eins.

return 0;

return beendet main und gibt dem Betriebssystem einen Wert zurück. Per Konvention bedeutet 0, dass das Programm erfolgreich war, und jede andere Zahl signalisiert einen Fehler. Skripte und Build-Werkzeuge lesen diesen Exit-Code. Innerhalb von main ist die Zeile optional: Erreicht die Ausführung die schließende Klammer, verhält sich C++ so, als hättest du return 0; geschrieben.

Die schließende Klammer

Die schließende geschweifte Klammer beendet den Rumpf von main und damit das Programm.

std::endl vs. '\n'

Es gibt zwei gängige Wege, eine Zeile zu beenden, und beide kommen in echtem Code vor:

Ausgabe:

Hello, World!
Hello again!
Line one
Line two

Das sichtbare Ergebnis ist gleich. Der Unterschied: std::endl schreibt einen Zeilenumbruch und leert dann den Stream, wodurch gepufferter Text sofort ans Terminal geht. '\n' schreibt nur den Zeilenumbruch, und der Stream leert sich nach eigenem Zeitplan (spätestens beim Programmende). In einer Schleife, die Tausende Zeilen ausgibt, machen die zusätzlichen Leerungen durch std::endl einen messbaren Unterschied. Viele C++-Programmierer nehmen deshalb standardmäßig '\n' und verwenden std::endl nur, wenn der Text sofort erscheinen muss. Die Escape-Sequenz \n funktioniert auch innerhalb eines Strings, wie die dritte Zeile zeigt. Die Seite zu Ein- und Ausgabe behandelt cout und cin ausführlicher.

Die Version mit using namespace std;

Viele Tutorials schreiben Hello World so:

using namespace std; sagt dem Compiler, Namen, die er sonst nicht findet, im Namespace std zu suchen, also funktionieren cout und endl ohne Präfix. Für kleine Programme und Übungen ist das in Ordnung. In größerem Code und in Header-Dateien vermeidet man es meist, weil es Hunderte Standardnamen in den Gültigkeitsbereich holt, die mit deinen eigenen kollidieren können (zum Beispiel mit einer eigenen Funktion namens count oder distance). std::cout zu schreiben kostet fünf Zeichen und beseitigt das Risiko.

Hello World auf deinem Computer kompilieren und ausführen

Der Editor im Browser kompiliert für dich. Auf deinem eigenen Rechner erledigst du dieselben zwei Schritte selbst: die Quelldatei zu einer ausführbaren Datei kompilieren und dann die ausführbare Datei starten. Dafür brauchst du zuerst einen installierten C++-Compiler; die Installationsanleitung zeigt, wie du einen unter Windows, macOS und Linux einrichtest.

Speichere das Programm als hello.cpp, öffne ein Terminal im selben Ordner und kompiliere es:

g++ hello.cpp -o hello

Wenn nichts ausgegeben wird, hat es geklappt, und neben der Quelldatei liegt jetzt eine ausführbare Datei namens hello (hello.exe unter Windows). Führ sie aus:

./hello

Unter Windows startest du stattdessen hello.exe oder einfach hello. Unter macOS funktioniert clang++ hello.cpp -o hello genauso, und g++ ist dort meist Clang unter anderem Namen.

Zwei Optionen lohnen sich von Anfang an: -std=c++17 (oder -std=c++20) wählt den Sprachstandard, und -Wall -Wextra schaltet Warnungen ein, die echte Fehler finden:

g++ -std=c++17 -Wall -Wextra hello.cpp -o hello

Die Seite zum Kompilieren von C++ erklärt, was diese Optionen tun, was -o bedeutet und warum du ohne sie eine Datei namens a.out bekommst.

Häufige erste Fehler

Die Fehlertexte unten stammen von GCC (g++). Clang formuliert seine Meldungen anders, zeigt aber auf dieselbe Zeile.

Fehlendes Semikolon.

hello.cpp:5:5: error: expected ';' before 'return'

Der Compiler bemerkt das fehlende ; erst, wenn er das nächste Token erreicht, deshalb zeigt die Zeilennummer meist eine Zeile hinter den Fehler. Prüf das Ende der vorherigen Zeile.

Fehlendes #include <iostream>.

error: 'cout' is not a member of 'std'

std::cout ist in <iostream> deklariert. Füg das Include oben in der Datei ein.

Fehlendes std::.

error: 'cout' was not declared in this scope; did you mean 'std::cout'?

Schreib entweder std::cout und std::endl, oder füg nach dem Include using namespace std; ein.

Main statt main. C++ unterscheidet Groß- und Kleinschreibung. Ein Programm mit int Main() kompiliert, scheitert dann aber beim Linken mit undefined reference to 'main', weil der Linker die Funktion nicht findet, mit der das Programm starten soll.

Mit gcc statt g++ kompilieren. gcc hello.cpp kompiliert den C++-Code, linkt aber die C++-Standardbibliothek nicht, und du bekommst eine lange Liste von Fehlern der Art undefined reference to std::.... Nimm für C++-Dateien g++ (oder clang++).

Typografische Anführungszeichen. Code, der aus einer Textverarbeitung oder einer Webseite kopiert wurde, kann typografische Anführungszeichen (“Hello”) statt gerader ("Hello") enthalten. GCC meldet stray '\342' in program. Tipp die Anführungszeichen in deinem Editor neu.

Alte Header und void main. Manche sehr alten Tutorials verwenden #include <iostream.h> oder void main(). Beides ist kein Standard-C++: Der Header heißt <iostream> ohne .h, und main muss int zurückgeben. Moderne Compiler lehnen beides ab.

Ausgabe mit std::println in C++23

C++23 hat einen kürzeren Weg eingeführt, eine Zeile auszugeben: std::println aus dem Header <print>:

#include <print>

int main() {
    std::println("Hello, World!");
}

Es hängt den Zeilenumbruch für dich an und unterstützt {}-Platzhalter für Werte. Die Unterstützung kam mit GCC 14, Clang 18 mit libc++ und aktuellen Versionen von Visual Studio, und sie braucht -std=c++23. Der meiste vorhandene Code und die meisten Tutorials verwenden noch std::cout, daher lohnt es sich, beides sicher zu beherrschen.

Häufig gestellte Fragen

Wie schreibt man Hello World in C++?

Beginne mit #include <iostream>, definiere dann int main() und schreib std::cout << "Hello, World!" << std::endl; hinein, gefolgt von return 0;. Speichere die Datei als hello.cpp, kompiliere sie mit g++ hello.cpp -o hello und führe ./hello aus.

Warum braucht Hello World in C++ #include <iostream>?

std::cout und std::endl sind im Header <iostream> deklariert und nicht in die Sprache eingebaut. Ohne das Include kennt der Compiler diese Namen nicht und bricht mit einem Fehler wie 'cout' is not a member of 'std' ab.

Was ist der Unterschied zwischen std::endl und '\n'?

Beide beenden die Zeile. std::endl leert zusätzlich den Ausgabepuffer (flush) und schreibt den Text sofort hinaus. '\n' schreibt nur den Zeilenumbruch und lässt den Stream leeren, wenn er so weit ist. Das ist schneller, wenn du viele Zeilen ausgibst. Bei einer einzelnen Hello-World-Zeile gibt es keinen sichtbaren Unterschied.

Brauche ich return 0 am Ende von main in C++?

Nein. main ist die einzige Funktion, bei der C++ dich das return weglassen lässt; das Erreichen der schließenden Klammer gilt als return 0;, was dem Betriebssystem meldet, dass das Programm erfolgreich war. Viele schreiben es trotzdem hin, um den Exit-Status ausdrücklich zu machen.

Illustration der Programmiersprachen bei Coddy

Lerne mit Coddy zu programmieren

LOS GEHT'S