Qu'est-ce que la compilation conditionnelle?
En programmation informatique, la compilation conditionnelle décrit la capacité d'un compilateur logiciel ou d'un processeur de code source d'inclure ou d'ignorer certaines commandes ou blocs de code en fonction d'instructions spécifiques à un langage qui ne font pas techniquement partie de la spécification de base du langage de programmation. Les commandes utilisées pour déclencher la compilation conditionnelle dans un programme sont souvent appelées directives de pré-traitement, bien qu'elles puissent également être appelées directives de compilation, commentaires conditionnels ou définitions conditionnelles. Selon le compilateur ou le langage utilisé, les directives conditionnelles peuvent être des variables ou des macros définies par l'utilisateur, ou bien des variables système définies par le compilateur ou le système d'exploitation. La compilation conditionnelle est fréquemment utilisée pour configurer un seul ensemble de fichiers de code source afin qu'ils puissent être compilés sous différents environnements ou systèmes d'exploitation sans avoir à permuter ou modifier les fichiers source.
Les définitions conditionnelles utilisées pour tester la compilation conditionnelle peuvent varier d'une langue à l'autre, mais il s'agit généralement de macros ou d'autres expressions de métadonnées en dehors du champ des variables de programme normales. Dans les langages tels que C, les variables sont généralement des macros lues par un pré-processeur. La plupart du temps, les macros ne sont pas accessibles par le code source du programme exécutable réel, même si elles existent dans les mêmes fichiers source.
Les directives utilisées pour tester les variables conditionnelles définies sont rudimentaires et suivent la même logique qu'une instruction if-then. Les tests de base pouvant être effectués pour la compilation conditionnelle sont si une valeur est définie, non définie ou, dans certains cas, si deux variables définies sont équivalentes. Les variables ou les macros elles-mêmes ne contiennent généralement pas de valeur significative, car leur définition est ce que les directives recherchent. Avec certains langages et compilateurs, cependant, la valeur d'une variable définie peut avoir de l'importance si elle est évaluée pour l'état booléen.
Lorsqu'un compilateur rencontre des directives utilisées pour la compilation conditionnelle, celles-ci sont évaluées pour déterminer si leur test est vrai ou faux. Si true, le code qui suit la directive est compilé normalement; sinon, le compilateur ignorera complètement le code contenu dans la directive. Cela diffère des instructions logiques conditionnelles dans le code de programme exécutable lui-même car, même si la logique comporte un bloc de code qui ne peut pas être exécuté, il sera toujours interprété et compilé dans la plupart des cas. Avec les directives conditionnelles relatives au préprocesseur, le code sauté n'est jamais inclus, interprété ni compilé. Il convient également de noter que, une fois que le préprocesseur a évalué toutes les variables et directives conditionnelles, elles ne sont pas compilées avec le reste du programme, car elles ne sont conçues que pour guider le compilateur.
La compilation conditionnelle est le plus souvent utilisée pour inclure ou exclure du code spécifique à un système d'exploitation ou à un environnement particulier. Cela signifie que des bibliothèques existant dans un système d'exploitation peuvent être incluses de manière conditionnelle si les directives déterminent que le programme est compilé sous ce système d'exploitation. Alternativement, les directives peuvent également être utilisées pour inclure ou exclure du code basé sur des variables définies par l'utilisateur. Cela peut être fait afin que le code de débogage ou de profilage ne soit pas inclus dans la version finale d'un programme, ou que certaines fonctionnalités puissent être activées ou désactivées sans qu'il soit nécessaire de conserver des copies séparées du code.