Č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 ukáže červenou chybovou hlášku. Například v tomto programu chybí na řádku 4 středník:
#include <stdio.h>
int main(void) {
printf("Ahoj!\n")
printf("Jak se máte?\n");
return 0;
}Překladač Clang, který tady programy překládá, vypíše:
main.c:4:22: error: expected ';' after expression
4 | printf("Ahoj!\n")
| ^
| ;
1 error generated.Nejdůležitější je první řádek hlášky. Čtěte ho zleva:
main.cje název souboru s programem, tedy toho v editoru.4je číslo řádku s chybou. Čísla řádků vidíte v editoru vlevo.22je číslo sloupce: kolikátý znak na řádku to je. Počítají se i čtyři mezery na začátku řádku.error:říká, že jde o chybu. Za ním následuje popis v angličtině:expected ';' after expressionznamená „za výrazem jsem čekal;“, tady zaprintf(...).
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. říká, kolik chyb Clang našel.
Písmena s diakritikou, jako á nebo š, Clang počítá za dva znaky, takže na řádku s nimi vyjde číslo sloupce o něco větší, než kolik znaků napočítáte. Značka ^ ale ukazuje vždy na správné místo.
Trochu jinak vypadá hláška, když chybí uvozovka na konci textu:
#include <stdio.h>
int main(void) {
printf("Ahoj!\n);
return 0;
}main.c:4:12: warning: missing terminating '"' character [-Winvalid-pp-token]
4 | printf("Ahoj!\n);
| ^
main.c:4:12: 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 printf( proto nenajde nic, co by dávalo smysl: expected expression znamená „čekal jsem výraz“, tedy něco, co by šlo vypsat.
Program, který má jen varování a žádnou chybu, se spustí a tento web jeho varování neukazuje. Proto tu ta nejdůležitější varování platí jako chyby, třeba %d bez hodnoty ze cvičení Text a čísla. Poznáte je podle -Werror na konci řádku: [-Werror,-Wformat-insufficient-args].
Jedna chyba někdy způsobí několik hlášek a jindy zase zakryje jinou chybu, kterou překladač najde, až když tu první opravíte. 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.
Další časté chyby a jejich hlášky:
- Překlep v
printf, třebaprinftneboPrintf:call to undeclared function 'prinft'; ISO C99 and later do not support implicit function declarations. Překladač nezná funkci s tímto názvem. V poznámce pod hláškou dokonce radí, co jste nejspíš mysleli:did you mean 'printf'? - Chybí řádek
#include <stdio.h>: hláška začínácall to undeclared library function 'printf'a poznámka pod ní rovnou říká, co udělat:include the header <stdio.h>(připojte hlavičkový soubor). - Chybí
}na konci funkcemain:expected '}'a k tomu poznámkato match this '{', která ukazuje na závorku, ke které chybí pár.
Řádky s note: jsou jen doplňující poznámky. Některé ukazují do souborů standardní knihovny, třeba stdio.h, a těch si nemusíte všímat.
Jak psát:
Pokyny
Program v editoru má dvě chyby. 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. Objeví se nová hláška: první chyba tu druhou zakrývala. Opravte i ji, aby program vypsal:
Turnaj v piškvorkách
Kdy: v sobotu v 10:00
Kde: ve třídě 2.BZačněte programovat zdarma
6/7