Après, vu l'état du code, c'est déjà un cauchemar à lire, sans la gestion des erreurs.
Pourquoi? Parce que ce genre de code spaghetti n'a pas été pensé comme il le faut.
D'ailleurs, exception ou pas, tu as une boucle infinie dans ton code (si getc() > 2 ou al).
Si c'est un parseur que tu veux, tu ne fais pas "en série", sauf cas très simple, mais "en parallèle" avec une gestion d'état. Et là, magie, le code devient beaucoup plus simple à écrire et parser, exceptions ou pas.
Stateget(States){intc=getc();if(c==EOF)returnEOF;// Logique du parseur iciswitch(s){caseStart:/* Transition de start à XXX */if(c==1)returnActionA;elseif(c==2)returnNeedMoreInput;returnActionD;caseNeedMoreInput:/* Transition de start à ActionB ou C */if(c==0)returnActionB;returnActionC;default:returnEOF;}}voidparse(){enumStates=Start;while(true){s=get(s);// Action du parseur iciswitch(s){caseActionA:actionA();break;caseActionB:actionB();break;caseActionC:actionC();break;caseActionD:actionD();break;caseEOF:return;}}}
Utiliser des exceptions pour faire du retour de fonction, c'est créer 2 chemins (ou plus), là où il n'y en avait qu'un avant. Tu fais ça sur 10 niveaux, tu as maintenant 1024 chemins (ou plus) à tester et valider (donc 10x plus de code de test à écrire). Je te souhaite bien du courage.
Après, si une exception ne fuite pas vers le haut (difficile en général à réaliser), alors oui, les exceptions peuvent être utiles pour simplifier le code, mais il n'y a, dans ce cas, quasiment jamais d'avantage par rapport à des retours normaux bien gérés.
Par contre, avec l'aide de macro simples (remplaçant le try), tu peux capturer un callstack et là oui, c'est super bien pour retrouver le problème et simplifie fortement le code de log (uniquement à destination d'un développeur, car pour le pékin moyen, le log c'est mieux).
[^] # Re: Une autre vision des exceptions
Posté par xryl669 . En réponse au journal De l'influence néfaste de Google sur les développeurs C++. Évalué à 1. Dernière modification le 13 septembre 2022 à 12:15.
Après, vu l'état du code, c'est déjà un cauchemar à lire, sans la gestion des erreurs.
Pourquoi? Parce que ce genre de code spaghetti n'a pas été pensé comme il le faut.
D'ailleurs, exception ou pas, tu as une boucle infinie dans ton code (si getc() > 2 ou al).
Si c'est un parseur que tu veux, tu ne fais pas "en série", sauf cas très simple, mais "en parallèle" avec une gestion d'état. Et là, magie, le code devient beaucoup plus simple à écrire et parser, exceptions ou pas.
Utiliser des exceptions pour faire du retour de fonction, c'est créer 2 chemins (ou plus), là où il n'y en avait qu'un avant. Tu fais ça sur 10 niveaux, tu as maintenant 1024 chemins (ou plus) à tester et valider (donc 10x plus de code de test à écrire). Je te souhaite bien du courage.
Après, si une exception ne fuite pas vers le haut (difficile en général à réaliser), alors oui, les exceptions peuvent être utiles pour simplifier le code, mais il n'y a, dans ce cas, quasiment jamais d'avantage par rapport à des retours normaux bien gérés.
Par contre, avec l'aide de macro simples (remplaçant le
try), tu peux capturer un callstack et là oui, c'est super bien pour retrouver le problème et simplifie fortement le code de log (uniquement à destination d'un développeur, car pour le pékin moyen, le log c'est mieux).