Autres conseils

Juste une supposition pour expliquer pourquoi ils peuvent suggérer d'utiliser

do { ... } while(0,0)

sur

do { ... } while(0)

Bien qu'il n'y ait pas de différence de comportement et ne devrait y avoir aucune différence de coût d'exécution entre les deux.

Je pense que l'outil d'analyse statique se plaint de la boucle de while étant contrôlée par une constante dans le cas le plus simple et ne pas lorsque 0,0 est utilisé. La suggestion du client est probablement juste pour qu'ils ne reçoivent pas un tas de faux positifs de l'outil.

Par exemple, je parfois rencontré des situations où je veux avoir une instruction conditionnelle contrôlée par une constante, mais le compilateur se plaindra d'un avertissement au sujet d'une expression conditionnelle à une constante évaluation. Ensuite, je dois sauter à travers quelques cerceaux pour obtenir le compilateur pour arrêter de se plaindre (puisque je n'aime pas avoir faux messages d'avertissement).

est l'une de la suggestion de votre client les cerceaux que j'ai utilisé pour calmer cet avertissement, mais dans mon cas, il ne contrôlait pas une boucle de while, il devait faire face à une affirmation « toujours échoue ». De temps en temps, je vais avoir une zone de code qui ne devrait jamais exécuter (peut-être le cas par défaut d'un commutateur). Dans cette situation, je pourrais avoir une affirmation qui échoue toujours avec un certain message:

assert( !"We should have never gotten here, dammit...");

Mais, au moins un compilateur que j'utilise un message d'avertissement au sujet de l'expression évaluation toujours faux. Cependant, si je change à:

assert( ("We should have never gotten here, dammit...", 0));

L'avertissement disparaît, et tout le monde est heureux. Je suppose que l'outil d'analyse statique de même que votre client serait aussi. Notez que je cache généralement que peu de cerceau sauter derrière une macro comme:

#define ASSERT_FAIL( x) assert( ((x), 0))

Il est peut-être agréable d'être en mesure de dire au vendeur d'outils pour résoudre le problème, mais il pourrait y avoir des cas légitimes où ils ne veulent réellement diagnostiquer une boucle étant contrôlée par une expression booléenne constante. Sans parler du fait que, même si vous convaincre un fournisseur d'outils pour faire un tel changement, cela ne vous aide pas pour l'année suivante ou, afin qu'il puisse prendre pour obtenir réellement une solution.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top