Exemples d'implémentations Goto bénéfiques en C et C
Malgré la désapprobation généralisée des instructions goto, il existe des cas où elles peuvent être utilisées efficacement . Ce fil de discussion explore de tels cas, inspiré par une réponse votée positive qui a été initialement perçue comme une blague.
Étude de cas : boucle infinie
L'exemple suivant démontre un cas spécifique et documenté utilisation de goto :
infinite_loop: // code goes here goto infinite_loop;
Cette boucle est préférable aux alternatives en raison de sa clarté et de sa spécificité. Goto représente une branche inconditionnelle, tandis que ses alternatives reposent sur des structures avec des branches conditionnelles et des conditions dégénérées toujours vraies. De plus, l'étiquette documente l'intention, éliminant ainsi le besoin de commentaires supplémentaires.
Étude de cas : nettoyage en C
En C, une utilisation courante de goto est pour le branchement à un bloc de nettoyage :
void foo() { if (!doA()) goto exit; if (!doB()) goto cleanupA; if (!doC()) goto cleanupB; /* everything has succeeded */ return; cleanupB: undoB(); cleanupA: undoA(); exit: return; }
Cette approche permet une gestion des erreurs concise et structurée. Chaque condition d'erreur potentielle est traitée avec une instruction goto qui renvoie au code de nettoyage approprié. RAII en C fournit une manière plus idiomatique de gérer de tels scénarios.
Critères d'évaluation
Pour garantir une évaluation équitable, les critères suivants ont été établis :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!