15Fermer17
deleted2Le 10/11/2014 à 14:22
Tiens, je ne pensais pas que cette question soulèverait autant d'intérêt. Perso, ça me fait gamberger à fond à chaque programme...
Pour ce qui est de mon cas, on est dans une application locale qui s'occupe de données/fichiers/ressources locales qui ne sont pas utilisés par un autre. C'est donc du très simple.

Merci à tous pour vos avis en tout cas, vos restours et expériences m'intéressent grandement. smile

squalyl (./6) :
Avant de me gotoeuler dessus la raison est d'éviter la séquence de

if(fail) {
fclose()
liberation_des_autres_ressources()
}

(grin)

J'ai plusieurs manières de contourner ça, mais aucune ne me satisfait :
int main (void)
{
    if (!InitSdl ()) {
        return EXIT_FAILURE;
    }
    if (!InitFont ()) {
        DeinitAll ();
        return EXIT_FAILURE;
    }
    if (!InitRessources ()) {
        DeinitAll ();
        return EXIT_FAILURE;
    }
    if (!InitGameState ()) {
        DeinitAll ();
        return EXIT_FAILURE;
    }
    if (!GameStateEngine ()) {
        DeinitAll ();
        return EXIT_FAILURE;
    }
    DeinitAll ();

#ifdef DEBUG
    PrintGSMax ();
#endif

    return EXIT_SUCCESS;
}

void DeinitAll (void)
{
    DeinitGameState ();
    DeinitRessources ();
    DeinitFont ();
    DeinitSdl ();
}

Comme tous les deinit sont appelés, ça les oblige à avoir une variable static m_init (initialisée à false évidemment) pour savoir s'ils ont été initialisés ou non. J'aime pas.

L'autre solution, c'est ça :
if (a) {
if (b) {
if (c) {
.....
....
....
....
}
closeC();
}
closeB();
}
closeA();

Ca devient bordélique quand t'initialises plus de 10 trucs ici et là.
ps -> c'est ce que propose Brunni au ./8, et j'ai été vite débordé. C'est le plus propre à l'esprit, conceptuellement parlant, mais perso j'ai pas trouvé ça commode quand le nombre de if augmente démesurément.

Godzil -> chapeau, t'as réussi à me convaincre que goto n'est pas une instruction démonique créée par les reptiliens du NOM pour nous infiltrer, je vais essayer, ça a l'air en effet très propre si on s'entient à des règmes d'utilisation très strictes. smile

Du coup, je crayonne autant que toi le ./10 de Zerosquare. smile