Menu

Hello World w C++: pierwszy program, linijka po linijce

Program Hello World w C++ wyjaśniony linijka po linijce: #include <iostream>, int main(), std::cout i <<, std::endl a '\n', return 0, a do tego kompilacja i naprawa pierwszych błędów, na które trafiają początkujący.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

Program

Oto kompletny program Hello World w C++. Naciśnij Run, aby skompilować go i uruchomić w przeglądarce:

Wypisuje jedną linię:

Hello, World!

Pięć linijek kodu i każda ma konkretne zadanie. Kolejne sekcje omawiają je po kolei, a potem pokazują, jak zbudować ten sam plik na własnym komputerze i co zwykle oznaczają pierwsze błędy kompilatora.

Linijka po linijce

#include <iostream>

Linie zaczynające się od # to polecenia dla preprocesora, który działa przed właściwym kompilatorem. #include <iostream> wkleja deklaracje ze standardowego nagłówka <iostream> (strumienie wejścia i wyjścia). To właśnie w tym nagłówku zadeklarowane są std::cout i std::endl. C++ nie ma wbudowanej instrukcji print; wypisywanie należy do biblioteki standardowej, a tą linijką je włączasz.

int main() {

Każdy program w C++ zaczyna działanie od funkcji o nazwie main. Musi być dokładnie jedna i musi być zapisana małymi literami. int przed nią oznacza, że main po zakończeniu zwraca liczbę całkowitą do systemu operacyjnego. Puste nawiasy znaczą, że tutaj nie przyjmuje argumentów, a klamra otwierająca { rozpoczyna ciało funkcji.

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

Ta linijka faktycznie wypisuje tekst.

  • std::cout to standardowy strumień wyjścia, zwykle terminal. Przedrostek std:: mówi, że cout należy do przestrzeni nazw std, w której trzymana jest cała biblioteka standardowa.
  • << to operator wstawiania. Wysyła wartość stojącą po jego prawej stronie do strumienia po lewej. Można go łączyć w łańcuch, a każde kolejne << dokłada następny fragment do tego samego wyjścia.
  • "Hello, World!" to literał tekstowy: tekst w cudzysłowie.
  • std::endl kończy linię.
  • Średnik kończy instrukcję. Każda instrukcja w C++ go potrzebuje.

return 0;

return kończy main i przekazuje wartość systemowi operacyjnemu. Zgodnie z konwencją 0 oznacza sukces, a każda inna liczba sygnalizuje błąd. Ten kod wyjścia odczytują skrypty i narzędzia do budowania. Wewnątrz main ta linijka jest opcjonalna: jeśli wykonanie dojdzie do zamykającej klamry, C++ zachowuje się tak, jakby było tam return 0;.

Klamra zamykająca

Klamra zamykająca kończy ciało main, a wraz z nim cały program.

std::endl a '\n'

Są dwa popularne sposoby kończenia linii i oba występują w prawdziwym kodzie:

Wynik:

Hello, World!
Hello again!
Line one
Line two

Widoczny efekt jest taki sam. Różnica polega na tym, że std::endl zapisuje znak nowej linii, a potem opróżnia strumień, co od razu wypycha zbuforowany tekst do terminala. '\n' zapisuje tylko znak nowej linii, a strumień opróżnia się według własnego harmonogramu (najpóźniej przy zakończeniu programu). W pętli, która wypisuje tysiące linii, dodatkowe opróżnienia przez std::endl dają mierzalną różnicę, dlatego wielu programistów C++ domyślnie używa '\n', a std::endl tylko wtedy, gdy tekst musi pojawić się natychmiast. Sekwencja \n działa też wewnątrz napisu, co pokazuje trzecia linijka. Strona o wejściu i wyjściu omawia cout i cin dokładniej.

Wersja z using namespace std;

Wiele poradników zapisuje Hello World tak:

using namespace std; każe kompilatorowi szukać w przestrzeni nazw std nazw, których nie znajdzie gdzie indziej, więc cout i endl działają bez przedrostka. W małych programach i ćwiczeniach to w porządku. W większym kodzie i w plikach nagłówkowych zwykle się tego unika, bo wciąga to do zasięgu setki standardowych nazw, które mogą kolidować z twoimi (na przykład z twoją funkcją o nazwie count albo distance). Pisanie std::cout kosztuje pięć znaków i usuwa to ryzyko.

Kompilacja i uruchomienie Hello World na komputerze

Edytor w przeglądarce kompiluje za ciebie. Na własnym komputerze wykonujesz te same dwa kroki samodzielnie: kompilujesz plik źródłowy do pliku wykonywalnego, a potem uruchamiasz ten plik. Najpierw potrzebujesz zainstalowanego kompilatora C++; poradnik instalacji pokazuje, jak go skonfigurować w Windows, macOS i Linuksie.

Zapisz program jako hello.cpp, otwórz terminal w tym samym folderze i skompiluj go:

g++ hello.cpp -o hello

Jeśli nic się nie wypisało, wszystko zadziałało i obok pliku źródłowego jest teraz plik wykonywalny hello (hello.exe w Windows). Uruchom go:

./hello

W Windows uruchom zamiast tego hello.exe albo po prostu hello. W macOS clang++ hello.cpp -o hello działa tak samo, a g++ jest tam zwykle Clangiem pod inną nazwą.

Od początku warto dodawać dwie flagi: -std=c++17 (albo -std=c++20) wybiera standard języka, a -Wall -Wextra włącza ostrzeżenia, które wyłapują prawdziwe błędy:

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

Strona o kompilacji C++ wyjaśnia, co robią te flagi, co znaczy -o i dlaczego bez niej dostajesz plik o nazwie a.out.

Częste pierwsze błędy

Poniższe komunikaty pochodzą z GCC (g++). Clang formułuje je inaczej, ale wskazuje tę samą linię.

Brakujący średnik.

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

Kompilator zauważa brak ; dopiero przy następnym tokenie, więc numer linii zwykle wskazuje linię po błędzie. Sprawdź koniec poprzedniej linii.

Brakujące #include <iostream>.

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

std::cout jest zadeklarowane w <iostream>. Dodaj include na początku pliku.

Brakujące std::.

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

Albo pisz std::cout i std::endl, albo dodaj using namespace std; po include.

Main zamiast main. C++ rozróżnia wielkość liter. Program z int Main() się kompiluje, ale potem pada na etapie linkowania z komunikatem undefined reference to 'main', bo linker nie może znaleźć funkcji, od której program ma wystartować.

Kompilacja przez gcc zamiast g++. gcc hello.cpp kompiluje kod C++, ale nie linkuje biblioteki standardowej C++, więc dostajesz długą listę błędów undefined reference to std::.... Do plików C++ używaj g++ (albo clang++).

Drukarskie cudzysłowy. Kod skopiowany z edytora tekstu albo strony internetowej może zawierać cudzysłowy typograficzne (“Hello”) zamiast prostych ("Hello"). GCC zgłasza wtedy stray '\342' in program. Wpisz cudzysłowy ponownie w swoim edytorze.

Stare nagłówki i void main. Niektóre bardzo stare poradniki używają #include <iostream.h> albo void main(). Żadne z nich nie jest standardowym C++: nagłówek to <iostream> bez .h, a main musi zwracać int. Nowoczesne kompilatory odrzucają oba zapisy.

Wypisywanie przez std::println w C++23

C++23 dodał krótszy sposób wypisania linii, std::println z nagłówka <print>:

#include <print>

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

Sam dodaje znak nowej linii i obsługuje miejsca na wartości {}. Obsługa pojawiła się w GCC 14, Clangu 18 z libc++ i nowszych wersjach Visual Studio, a wymaga -std=c++23. Większość istniejącego kodu i poradników nadal używa std::cout, więc warto swobodnie posługiwać się obydwoma.

Najczęściej zadawane pytania

Jak napisać Hello World w C++?

Zacznij od #include <iostream>, potem zdefiniuj int main() i umieść w niej std::cout << "Hello, World!" << std::endl;, a po tym return 0;. Zapisz plik jako hello.cpp, skompiluj go poleceniem g++ hello.cpp -o hello i uruchom ./hello.

Dlaczego Hello World w C++ potrzebuje #include <iostream>?

std::cout i std::endl są zadeklarowane w nagłówku <iostream>, a nie wbudowane w język. Bez tego include kompilator nie zna tych nazw i zatrzymuje się z błędem w rodzaju 'cout' is not a member of 'std'.

Czym się różni std::endl od '\n'?

Oba kończą linię. std::endl dodatkowo opróżnia bufor wyjścia, więc tekst trafia na ekran od razu. '\n' zapisuje tylko znak nowej linii i pozwala strumieniowi opróżnić bufor, kiedy będzie gotowy, co jest szybsze przy wypisywaniu wielu linii. Przy jednej linijce Hello World nie widać żadnej różnicy.

Czy na końcu main w C++ potrzebne jest return 0?

Nie. main to jedyna funkcja, w której C++ pozwala pominąć return; dojście do zamykającej klamry jest traktowane jak return 0;, co mówi systemowi operacyjnemu, że program zakończył się sukcesem. Wiele osób i tak to pisze, żeby kod wyjścia był jawny.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ