Čtení chyb

Chyby k programování patří. Dělají je i zkušení programátoři, a to každý den. Důležité je umět je rychle najít a opravit, a s tím vám pomůžou chybové hlášky.

Překladač si před spuštěním projde celý program. Když v něm najde chybu, program vůbec nespustí, ani řádky před chybou, a ve výstupu ukáže červenou chybovou hlášku. Například v tomto programu chybí na řádku 4 středník:

#include <iostream>

int main() {
    std::cout << "Ahoj!" << std::endl
    std::cout << "Jak se máš?" << std::endl;
}

Překladač Clang, který tady programy překládá, vypíše:

main.cpp:4:38: error: expected ';' after expression
    4 |     std::cout << "Ahoj!" << std::endl
      |                                      ^
      |                                      ;
1 error generated.

Nejdůležitější je první řádek hlášky. Čtěte ho zleva:

  • main.cpp je název souboru s programem, tedy toho v editoru.
  • 4 je číslo řádku s chybou. Čísla řádků vidíte v editoru vlevo.
  • 38 je číslo sloupce: kolikátý znak na řádku to je.
  • error: říká, že jde o chybu. Za ním je anglicky popis: expected ';' after expression znamená „za výrazem jsem čekal ;“.

Pod tím Clang ukáže řádek s chybou a místo označí znakem ^. Často pod něj dokonce napíše, co tam chybí, tady ;. Poslední řádek 1 error generated. jen říká, kolik chyb Clang našel.

Trochu jinak vypadá hláška, když chybí uvozovka na konci textu:

#include <iostream>

int main() {
    std::cout << "Ahoj! << std::endl;
}
main.cpp:4:18: warning: missing terminating '"' character [-Winvalid-pp-token]
    4 |     std::cout << "Ahoj! << std::endl;
      |                  ^
main.cpp:4:18: error: expected expression
1 warning and 1 error generated.

Řádek s warning: je varování: upozornění, že něco vypadá podezřele. Tady je dokonce užitečnější než samotná chyba. missing terminating '"' character znamená „chybí koncová uvozovka“ a znak ^ ukazuje na uvozovku, ke které chybí pár. Bez ní překladač nepozná, kde text končí, a za << proto nenajde nic, co by dávalo smysl: expected expression znamená „čekal jsem výraz“, tedy něco, co by šlo vypsat.

Jedna chyba někdy způsobí několik hlášek. Když třeba chybí řádek #include <iostream>, dostanete chybu use of undeclared identifier 'std' (použití neznámého názvu std) u každého std:: v programu. Proto vždy opravte nejdřív první chybu a program spusťte znovu. Další hlášky často zmizí, protože byly jen jejím následkem. A naopak, po opravě se může objevit nová chyba, kterou překladač předtím nenašel.

Další časté chyby a jejich hlášky:

  • Chybí std:: před cout: use of undeclared identifier 'cout'; did you mean 'std::cout'? Clang rovnou radí, co jste nejspíš mysleli.
  • Velké písmeno místo malého: no member named 'Cout' in namespace 'std'; did you mean 'cout'?
  • Chybí } na konci programu: expected '}'

Řádky s note: jsou jen doplňující poznámky. Často ukazují do souborů standardní knihovny, takže si jich nemusíte všímat.

Pokyny

Program v editoru má dvě chyby: chybí v něm jeden středník a jedna uvozovka. Spusťte ho a přečtěte si první chybovou hlášku: na kterém řádku a sloupci je chyba a co je špatně? Chybu opravte a program spusťte znovu. Opakujte to, dokud program nevypíše:

Turnaj v piškvorkách
Kdy: v sobotu v 10:00
Kde: ve třídě 2.B

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

5/6