Bon, autre "problème", qui n'en est peut-être pas un en soi (ça marche bien), mais je ne doit pas m'y prendre au mieux en l'occurence
(qu'importe le code, regardez juste la structure) :
if (((CAREER_DATA*)data->customData)->careersPtr != NULL)
{
;
}
else /* memory error */
{
fclose (scoresFile);
free (data->customData);
free (data);
error = EXIT_FAILURE;
fprintf (stderr, outOfMemory);
return NULL;
}
}
else /* memory error */
{
fclose (scoresFile);
free (data);
error = EXIT_FAILURE;
fprintf (stderr, outOfMemory);
return NULL;
}
}
else /* invalid number of careers */
{
fprintf(stderr, fileCareersInvalid);
fclose(scoresFile);
numberEntries = 0;
}
}
else /* eof encountered at opening, file doesn't exist */
{
fclose (scoresFile);
numberEntries = 0;
}
}
else /* error when opening 'careers' */
{
fprintf(stderr, couldntOpenCareers);
numberEntries = 0;
}
Comme vous le voyez dans cette cascade de else{}, il y a beaucoup de code récurrent (error, fprintf, fclose etc...). Y a-t-il une manière plus élégante de fermer ce qu'on fait quand ça échoue quelque part, entre diverses allocations et ouvertures de fichiers ? J'ai pensé à une fonction, mais ça implique d'initialiser tous les paramètres, et à passer tout en argument, ça me semble tout aussi lourd.
Vous faites comment ?
Brunni -> même en assembleur je jouais pas à ça, j'ai jamais aimé hacker (sauf aucune autre solution technique, et je n'ai qu'un exemple en tête pour la programmation sur TI, c'est l'accès au variables globales pour une interruption dans un programme read-only).