Skip to content

Časté chyby v PRP

Jakub Mareda edited this page Nov 29, 2016 · 1 revision

Časté chyby a nedostatky v úkolech z 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.

Opakování bloků kódu

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.

free() před každým výpisem chyby

Ú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);
}

Automatické smazání všech pointerů

Tohle už je pro pokročilejší. Lze použít pouze pokud víme kolik pointerů budeme alokovat.