#define et autres directives de compilation C#

Un set de directives de compilation sont utilisées pour affecter (principalement) la manière dont le compilateur voit le code à compiler.

#region
#endregion

#define
#undef
#if
#else
#elif
#endif

#warning
#error
#line

Je dis principalement car les deux premiers – #region et #endregion – sont complètement ignorés par le compilateur. Ils sont simplement utilisés par Visual Studio comme fonctionnalité pour améliorer l’apparence du code source.

Les six suivantes – de #define à #endif – peuvent être utilisées pour conditionner la compilation du code source.

Les trois dernières – #warning, #error and #line – force le compilateur à générer les avertissements et les erreurs ainsi que les numéros de lignes. Utiles pour traiter certains avertissements comme erreur au niveau d’une compilation en mode Release.

J’ai décrit ci-après un exemple d’utilisation sous Visual Studio.

Pour créer des comportements de compilation en fonction de l’environnement de configuration (Debug/Release/Design ou autre), il suffit d’utiliser les directives de compilation.

Dans cet exemple, je ne souhaite pas que le système d’authentification soit exécuter lorsque je lance l’application en configuration Design.

  • Dans les propriétés du projet, il s’agit dans un premier temps définir pour tous les éléments de ce projet la direction de compilation conditionnelle pour l’environnement de configuration souhaité. Dans mon cas, j’utilise le symbole DESIGN pour la configuration Design.
  •  

  • Dorénavant, au niveau du code C# de ce projet, il est possible de tester cette directive. Le code est grisé lorsque la condition de la directive est remplie.
  •  

    Cas 1 : l’environnement de configuration est Debug, la condition de compilation (#if (!DESIGN)) est remplie, le code est executé.

    Cas 2 : l’environnement de configuration est Design, la condition de compilation (#if (!DESIGN)) n’est pas remplie, le code n’est pas exécuté.

En savoir plus : http://www.davidarno.org/c-howtos/define-and-other-c-preprocessor-directives/

Enjoy !