Compilateur C, affirme - comment mettre en place?

J'aimerais mettre en œuvre un "faire valoir" qui empêche la compilation, plutôt que de ne pas au moment de l'exécution, dans le cas d'erreur.

J'ai actuellement défini comme ce qui fonctionne très bien, mais qui augmente la taille des fichiers binaires.

#define MY_COMPILER_ASSERT(EXPRESSION) switch (0) {case 0: case (EXPRESSION):;}

Exemple de code (qui ne peut pas compiler).

#define DEFINE_A 1
#define DEFINE_B 1
MY_COMPILER_ASSERT(DEFINE_A == DEFINE_B);

Comment puis-je mettre en œuvre cette opération afin qu'elle ne génère pas de code (dans le but de réduire la taille des fichiers binaires générés)?

  • Je ne pense vraiment pas qu'il est possible de créer un statique affirmer dans la plaine, C, aimerais savoir si!
  • Doublon avec plusieurs bonnes réponses: stackoverflow.com/questions/174356/...
  • Depuis que cette question est relativement ancienne: _Static_assert et ses associés macro static_assert sont standardisés de C11. C'est maintenant intégré à la langue.
  • Sûrement l'optimiseur peut jeter vide commutateurs.
InformationsquelleAutor NickB | 2009-04-30