Bouahaha, trop facile

En C, je fais :
- une fonction pour gérer mes erreurs qui nécessite un simple appel
- une fonction qui catch les SIGILL ou autre pour indiquer où j'en étais au moment du core dump (avec une simple chaine globale qu'il suffit de mettre à jour suivant la fonction appelée)
Prenons un exemple réel.
J'ai une fonction, qui, dans l'ordre:
- ouvrir un fichier
- alloue de la mémoire
- crée un pool de thread et fait d'autres trucs
Chaque truc est nécessaire pour faire les suivants:
- j'ai besoin de mon fichier avant de threader le truc
- j'ai besoin de la mémoire allouée avant de threader le truc
Donc, je ne peux que swap les deux premières instructions (mais au final, cela ne change rien).
J'ai donc plusieurs cas d'erreur :
- si l'ouverture échoue : return
- si l'allocation échoue : je dois clore le fichier
- si le threading échoue : je dois clore le fichier, et libérer la mémoire
En swappant les deux premières instructions:
- si l'alloc échoue: return
- si l'ouverture échoue: free
- si le threading échoue : clore le fichier, et libérer la mémoire
Dans tout les cas, après exécution des trois opérations, je dois clore le fichier, libérer la mémoire, libérer le pool de thread.
Donc, en faisant une fonction, il faut que je lui donne :
- le fd
- le pointeur sur ma mémoire
- le pointeur sur mon pool
Si je clos le fichier alors qu'il n'est pas ouvert : zut.
Si je libère ma mémoire alors qu'elle n'est pas allouée : zut !
Si je libère le pool alors que la création dudit pool a échouée, humpf
Donc, dans ma fonction, je dois aussi lui donner un moyen de savoir quoi faire des 3 paramètres suscités.
N'est-ce pas un peu compliqué ?

[quote="kergsen"
Ca date un peu ton argument, on a inventer try/throw/catch/finally depuis et meme en C:
https://code.google.com/p/exceptions4c 
[/quote]
Pour reprendre mon exemple ci-dessus, cela signifie que je dois mettre des try/catch imbriqués, c'est à dire augmenter d'autant la profondeur du code, c'est à dire diminuer d'autant la lisibilité dudit code.
Je trouve que c'est beaucoup faire pour remplacer une solution qui n'a qu'une idéologie contre elle, non ?
Au passage, concernant exceptions4c, je note que le truc utilise des signaux : ce n'est donc pas utilisable sur des programmes multi-threadé (
https://code.google.com/p/exceptions4c/wiki/threads); Rien que pour cela, non merci, goto still rulz

Amicalement,