Je voudrais construire une macro dans laquelle une fonction prédéfinie (ici simulée par "Call FCN ici") est appelée à chaque fois que la boucle se termine une itération. C'est ce que j'ai jusqu'à présent, qui fonctionne réellement.
Y a-t-il une manière plus courte, éventuellement avec plus de Macro Magic pour écrire un tel comportement? P>
MYWHILE(true){ bool b = foo(); if(b){ break; } }
3 Réponses :
Je voudrais construire une macro où une fonction prédéfinie (ici simulé par "appeler fcn ici") est appelé à chaque fois que la boucle se termine une itération, mais pas à la première fois. P>
Depuis votre code fourni et votre conflit de questions, il n'est pas clair quel comportement vous voulez. Pour implémenter ce qui précède, je vous recommanderais de ne pas utiliser de macros du tout et simplement d'écrire votre code comme: p>
xxx pré> blockQquote>
Ou le plus simple pour (; condition; fcn ()) code>
Désolé pour la description déroutante. La fonction doit être appelée après la première itération. Je veux dire au début de la deuxième itération qui est en fait la même chose.
@ 1201ProgramAlarm c'est ce que je cherchais.
@ 1201Programalarm: True, je suppose que je suppose que sa fonction devait faire partie de la condition. Un pour code> boucle WOUD ne le permet pas.
plutôt qu'un compliqué la fonction sera appelé à la fin de chaque itération, avant de réévaluer la condition. P> p> pendant la boucle code>, vous pouvez emballer ce dont vous avez besoin dans un
pour code> boucle:
Qu'est-ce qui ne va pas avec juste: qui est logiquement équivalent à: p> encore plus simple que: p> < Pré> xxx pré> p>
N'utilisez plus de macros de préprocesseur, ils sont surtout plus nuisibles que utiles
Mettez ce code dans une fonction au lieu d'une macro.
Pourquoi n'utilisez-vous pas simplement un
do {} pendant que code> boucle, ce qui fait exactement le comportement que vous avez décrit? (Bien que ce ne soit pas le comportement que vous avez dans votre code. Lequel êtes-vous voulu?)
Sur la deuxième et la deuxième fois, l'exécution d'époque pénètre dans votre boucle, votre implémentation appellera la fonction prédéfinie la première fois à travers car la statique bool sera déjà définie sur
true code> de la boucle précédente.