C/C++: Comment utiliser le do-while(0); construire sans les avertissements du compilateur comme C4127?

Je suis souvent utiliser do-while(0) construire dans mon #définit, pour les raisons décrites dans cette réponse. Aussi, je suis en train d'utiliser aussi haut que possible le niveau d'avertissement du compilateur pour attraper plus de potentiel problème et rendre mon code plus robuste et multi-plateforme. Donc, je suis généralement à l'aide de -Wall avec gcc et /Wall avec MSVC.

Malheureusement MSVC se plaindre do-while(0) construire:

foo.c(36) : warning C4127: conditional expression is constant

Que dois-je faire à propos de cet avertissement?

Juste désactiver globalement pour tous les fichiers? Il ne semble pas être une bonne idée pour moi.

  • Puisque vous avez ajouté le C++ tag, est-il possible de convertir le #define des macros dans les fonctions inline? Ce serait plus sûr.
  • J'ai aussi ajouté C tag, alors j'ai pensé que je lui ai demandé à propos de C-une solution compatible. Dois-je enlever C++ tag alors?
  • Avez-vous essayé un état comme la sizeof(char) != 1...?
  • Depuis les langues et les solutions sont très différents, oui. Supprimer la balise de langue que vous ne voulez pas de réponses pour
InformationsquelleAutor bialix | 2009-12-22