Je regardais le code d'un individu et j'ai remarqué qu'il semblait avoir un modèle dans ses fonctions :
<return-type> function(<params>)
{
<initialization>
do
{
<main code for function>
}
while(false);
<tidy-up & return>
}
Ce n'est pas mauvais Il s'agit d'un problème très particulier (le code actuel est assez propre et sans surprise). Ce n'est pas quelque chose que j'ai vu avant et je me demande si quelqu'un peut penser à une logique derrière cela - un contexte dans un langage différent peut-être ?
3 votes
Avez-vous essayé de le remplacer par la version "normale" et de voir s'il compile toujours ? S'il ne compile pas lorsqu'il est écrit normalement, l'erreur du compilateur pourrait donner un indice sur la raison de ce changement.
12 votes
Pourquoi ne pas poser la question à l'"individu" plutôt que de nous demander de deviner son intention ?
1 votes
Peut-être que son professeur a exigé qu'il utilise un
do...while()
et il a utilisé ce code comme modèle de fonction depuis.0 votes
@Neil - Qui sait de quand date ce code... l'auteur original pourrait être parti depuis longtemps, ou il n'y a aucun moyen d'identifier qui l'a écrit.
0 votes
Nick : Pourquoi ressentez-vous le besoin de faire d'autres suppositions ? Pourquoi ne pas laisser l'auteur de la question répondre par lui-même ?
6 votes
@Neil... Je veux éviter d'avoir l'air stupide quand je le confronte et qu'il m'explique l'utilisation super avancée du C++ à laquelle je n'ai jamais pensé.
0 votes
Comme le code entre accolades ne s'exécute qu'une seule fois, cela semble très étrange mais également inoffensif. Pouvez-vous donner un exemple un peu plus complet de ce qui se passe entre les accolades ?
6 votes
Il semble qu'il y ait déjà plusieurs réponses différentes, pouvez-vous demander à l'auteur original quelles étaient ses intentions et renvoyer un message ?
3 votes
Le code CPython de Guido van Rossum utilise largement ce modèle. Il est principalement utilisé à l'intérieur des définitions de macro, mais occasionnellement dans d'autres codes. Je me suis demandé s'il y avait une autre raison que le problème du goto, puisqu'il n'hésite pas à utiliser le goto ailleurs dans le code. Les autres explications proposées : point-virgule post-macro forcé et manque de portabilité des accolades libres semblent également convaincantes. Peut-être qu'un contributeur de CPython fera un commentaire...
0 votes
Cela répond-il à votre question ? Pourquoi utiliser des instructions do-while et if-else apparemment sans signification dans les macros ?