-
Notifications
You must be signed in to change notification settings - Fork 0
Časté chyby v PRP
Viděl jsem už docela dost cizích řešení úkolů. Narozdíl od předmětu RPH, v PRP vyučující studentům nedávají žádný feedback k tomu, jak kód vypadá. Hlavně když projde nějakými random testy napsanými v bashi. Rozhodl jsem se tedy udělat seznam věcí, co se v úkolech objevují a podle mně by neměly.
Žádná z těchto věcí nezpůsobí neúspěšné odevzdání, ale můžete kvůli ní například přehlédnout jinou chybu.
Kdykoli se kód opakuje, je to špatně. Je-li později něco třeba změnit, je potřeba to změnit na deseti místech najednou. Několik případů jsem viděl obzvlášť často.
Úkoly často končí nějakým výpisem chyby, pokud vstupní data nejsou správná. Před výpisem chyby je tedy třeba uvolnit paměť. Úkoly potom obsahují mnohokrát tuto sekvenci:
if( něco ) {
fprintf(stderr, "Nějaká chyba!");
free(pointer_1);
free(pointer_2);
return 100;
}
####Přesun chyby do funkce Můžeme kód zjednodušit pro začátek tím, že si uděláme funkci na ukončení programu s chybou:
void chyba(const char* zprava, const int error_code) {
fprintf(stderr, zprava);
// Exit ukončí program
exit(error_code);
}
Původní kód se tedy zkrátí aspoň o řádek:
if( něco ) {
free(pointer_1);
free(pointer_2);
chyba("Nějaká chyba!", 100);
}
Tohle už je pro pokročilejší. Lze použít pouze pokud víme kolik pointerů budeme alokovat.