Maison >développement back-end >C++ >Quand l'utilisation de « goto » en C ou C est-elle acceptable ?

Quand l'utilisation de « goto » en C ou C est-elle acceptable ?

DDD
DDDoriginal
2024-12-15 03:46:14744parcourir

When is Using `goto` in C or C   Acceptable?

Bonnes utilisations de Goto en C ou C

Malgré l'opinion souvent répandue selon laquelle goto est universellement nuisible, il existe certaines circonstances où son leur utilisation peut apporter des avantages évidents.

Blocs de nettoyage

Un tel est le cas lors de la création de blocs de nettoyage, un modèle couramment utilisé en C pour garantir une désallocation appropriée des ressources en cas d'erreurs. En utilisant goto, nous pouvons implémenter un bloc de nettoyage comme suit :

void foo()
{
    if (!doA())
        goto exit;
    if (!doB())
        goto cleanupA;
    if (!doC())
        goto cleanupB;

    /* everything has succeeded */
    return;

cleanupB:
    undoB();
cleanupA:
    undoA();
exit:
    return;
}

Ce code permet une gestion claire et efficace des conditions d'erreur. En cas d'erreur dans doB() ou doC(), les fonctions de nettoyage appropriées sont appelées et l'exécution passe à l'étiquette de sortie pour revenir de la fonction.

Branchement inconditionnel spécifique

Goto peut également être bénéfique lors de l'exécution de branchements inconditionnels spécifiques. Par exemple, le code suivant simule une boucle infinie à l'aide de goto :

infinite_loop:

    // code goes here

goto infinite_loop;

Cette approche est plus spécifique et plus auto-documentée que l'utilisation d'une boucle while avec une condition dégénérée, car elle indique clairement l'intention de continuer la boucle. .

Précautions

Il est important de noter que goto ne doit pas être utilisé sans discernement. Cela peut facilement conduire à du code spaghetti s’il n’est pas utilisé judicieusement. Cependant, lorsqu'il est utilisé de manière appropriée, il peut constituer un outil précieux pour créer un code efficace et lisible.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn