{"id":2688,"date":"2025-01-29T09:33:23","date_gmt":"2025-01-29T14:33:23","guid":{"rendered":"https:\/\/ve2cuy.com\/420-1c4\/?page_id=2688"},"modified":"2025-01-30T15:31:25","modified_gmt":"2025-01-30T20:31:25","slug":"compilation-conditionnelle","status":"publish","type":"page","link":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/compilation-conditionnelle\/","title":{"rendered":"Compilation conditionnelle"},"content":{"rendered":"<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"348\" height=\"324\" src=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/01\/horloge.png\" alt=\"\" class=\"wp-image-2709\" srcset=\"https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/01\/horloge.png 348w, https:\/\/ve2cuy.com\/420-1c4\/wp-content\/uploads\/2025\/01\/horloge-300x279.png 300w\" sizes=\"auto, (max-width: 348px) 100vw, 348px\" \/><\/figure>\n<\/div>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><br>Les directives <code>#ifdef<\/code>, <code>#ifndef<\/code>, <code>#else<\/code>, et <code>#endif<\/code> sont utilis\u00e9es pour la <strong>compilation conditionnelle<\/strong> dans le langage C. Elles permettent d\u2019inclure ou d\u2019exclure certaines parties du code en fonction de conditions sp\u00e9cifiques. Cela peut \u00eatre utile pour activer ou d\u00e9sactiver des sections de code selon des plateformes, des configurations de compilation, ou des environnements diff\u00e9rents.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. <code>#ifdef<\/code> (If Defined)<\/h3>\n\n\n\n<p>La directive <code>#ifdef<\/code> permet de v\u00e9rifier si une macro a \u00e9t\u00e9 d\u00e9finie. Si la macro a \u00e9t\u00e9 d\u00e9finie avant l\u2019utilisation de <code>#ifdef<\/code>, le bloc de code entre <code>#ifdef<\/code> et <code>#endif<\/code> sera compil\u00e9. Si la macro n&rsquo;est pas d\u00e9finie, le bloc de code est ignor\u00e9.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Exemple<\/strong> :<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  #define DEBUG  \/\/ D\u00e9finir la macro DEBUG\n\n  #ifdef DEBUG\n      printf(\"Mode d\u00e9bogage activ\u00e9\\n\");\n  #endif<\/pre>\n\n\n\n<p>Dans cet exemple, puisque la macro <code>DEBUG<\/code> a \u00e9t\u00e9 d\u00e9finie avant <code>#ifdef<\/code>, le code \u00e0 l&rsquo;int\u00e9rieur de <code>#ifdef<\/code> sera ex\u00e9cut\u00e9. La sortie sera :<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  Mode d\u00e9bogage activ\u00e9<\/pre>\n\n\n\n<p>Si la ligne <code>#define DEBUG<\/code> est supprim\u00e9e, alors la ligne <code>printf<\/code> sera ignor\u00e9e.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. <code>#ifndef<\/code> (If Not Defined)<\/h3>\n\n\n\n<p>La directive <code>#ifndef<\/code> est l&rsquo;inverse de <code>#ifdef<\/code>. Elle permet de v\u00e9rifier si une macro <strong>n\u2019a pas<\/strong> \u00e9t\u00e9 d\u00e9finie. Si la macro n\u2019est pas d\u00e9finie avant <code>#ifndef<\/code>, le bloc de code sera compil\u00e9, sinon il sera ignor\u00e9.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Exemple<\/strong> :<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  #ifndef DEBUG\n      #define DEBUG 1  \/\/ Si DEBUG n'est pas d\u00e9j\u00e0 d\u00e9fini, le d\u00e9finir \u00e0 1\n  #endif<\/pre>\n\n\n\n<p>Ici, si la macro <code>DEBUG<\/code> n&rsquo;\u00e9tait pas d\u00e9finie avant ce bloc, elle serait d\u00e9finie \u00e0 <code>1<\/code>. Si elle l&rsquo;\u00e9tait d\u00e9j\u00e0, le code \u00e0 l&rsquo;int\u00e9rieur de <code>#ifndef<\/code> sera ignor\u00e9.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. <code>#else<\/code><\/h3>\n\n\n\n<p>La directive <code>#else<\/code> permet de sp\u00e9cifier un bloc de code \u00e0 ex\u00e9cuter si la condition de la directive <code>#ifdef<\/code> ou <code>#ifndef<\/code> est fausse (si la macro n\u2019est pas d\u00e9finie dans le cas de <code>#ifdef<\/code> ou si elle est d\u00e9finie dans le cas de <code>#ifndef<\/code>).<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Exemple<\/strong> :<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  #ifdef DEBUG\n      printf(\"Mode d\u00e9bogage activ\u00e9\\n\");\n  #else\n      printf(\"Mode normal activ\u00e9\\n\");\n  #endif<\/pre>\n\n\n\n<p>Dans cet exemple :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Si <code>DEBUG<\/code> est d\u00e9fini, le programme affiche \u00ab\u00a0Mode d\u00e9bogage activ\u00e9\u00a0\u00bb.<\/li>\n\n\n\n<li>Si <code>DEBUG<\/code> n\u2019est pas d\u00e9fini, le programme affiche \u00ab\u00a0Mode normal activ\u00e9\u00a0\u00bb.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">4. Combinaison de <code>#ifdef<\/code>, <code>#else<\/code>, et <code>#endif<\/code><\/h3>\n\n\n\n<p>Ces directives sont souvent utilis\u00e9es ensemble pour g\u00e9rer plusieurs configurations ou comportements dans le code en fonction des macros d\u00e9finies.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Exemple combin\u00e9<\/strong> :<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  #ifdef DEBUG\n      printf(\"Mode d\u00e9bogage activ\u00e9\\n\");\n  #else\n      printf(\"Mode normal activ\u00e9\\n\");\n  #endif\n\n  #ifndef VERSION\n      #define VERSION \"1.0\"\n  #endif\n\n  printf(\"Version : %s\\n\", VERSION);<\/pre>\n\n\n\n<p>Dans cet exemple :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Le premier bloc affiche un message selon que <code>DEBUG<\/code> est d\u00e9fini ou non.<\/li>\n\n\n\n<li>Le deuxi\u00e8me bloc d\u00e9finit une version si la macro <code>VERSION<\/code> n&rsquo;est pas d\u00e9j\u00e0 d\u00e9finie. Si elle l&rsquo;est, la ligne <code>#define VERSION \"1.0\"<\/code> sera ignor\u00e9e.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">5- Utilisation conditionnelle de l\u2019affichage dans la console<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#ifdef DEBUG\n#define AFFICHER(x) Serial.print(x)\n#else\n#define AFFICHER\n#endif\n\n\/\/ Utilisation:\nAFFICHER(\"Un message ...\\n\");<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">5.1 &#8211; Exemple avec un nombre variable de param\u00e8tres:<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#define AFFICHER(...)  Serial.print(__VA_ARGS__)\n\n\/\/ Utilisation:\nAFFICHER(255, HEX);\nAFFICHER(\"Test\");<\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">6 &#8211; MACRO de garde pour les fichiers.h<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#ifndef fichier_h\n#define fichier_h\n...\n\n#endif\n\n\/\/ Il est aussi possible d'utiliser la directive suivante pour s'assurer que le fichier sera inclu q'une seule fois.\n\n#pragma once\n\n...\n\n\/\/ Voici une autre utilisation de #pragma\n#pragma GCC poison sprintf \/\/ Produira une erreur \u00e0 l'utilisation de la fonction sprintf():\n\nCompiling .pio\/build\/uno\/src\/main.cpp.o\nsrc\/main.cpp:18:3: error: attempt to use poisoned \"sprintf\"\n   sprintf(buffer, \"Yo\");<\/pre>\n\n\n\n<p>R\u00e9f\u00e9rence pour <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Pragma_once\">#pragma_once<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusion<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>#ifdef<\/code><\/strong> : Inclut un bloc de code si la macro est d\u00e9finie.<\/li>\n\n\n\n<li><strong><code>#ifndef<\/code><\/strong> : Inclut un bloc de code si la macro n&rsquo;est pas d\u00e9finie.<\/li>\n\n\n\n<li><strong><code>#else<\/code><\/strong> : Permet de sp\u00e9cifier un bloc de code alternatif si la condition de <code>#ifdef<\/code> ou <code>#ifndef<\/code> est fausse.<\/li>\n\n\n\n<li><strong><code>#endif<\/code><\/strong> : Termine un bloc de condition.<\/li>\n<\/ul>\n\n\n\n<p>Ces directives permettent une gestion tr\u00e8s flexible du code, particuli\u00e8rement utile pour les projets multi-plateformes, pour inclure\/exclure des instructions de tra\u00e7age ou lors de la gestion de diff\u00e9rentes versions d\u2019un m\u00eame programme.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Les directives #ifdef, #ifndef, #else, et #endif sont utilis\u00e9es pour la compilation conditionnelle dans le langage C. Elles permettent d\u2019inclure ou d\u2019exclure certaines parties du code en fonction de conditions sp\u00e9cifiques. Cela peut \u00eatre utile pour activer ou d\u00e9sactiver des sections de code selon des plateformes, des configurations de compilation, ou des environnements diff\u00e9rents. 1. [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"ub_ctt_via":"","footnotes":""},"class_list":["post-2688","page","type-page","status-publish","hentry"],"featured_image_src":null,"_links":{"self":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/2688","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/comments?post=2688"}],"version-history":[{"count":11,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/2688\/revisions"}],"predecessor-version":[{"id":2713,"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/pages\/2688\/revisions\/2713"}],"wp:attachment":[{"href":"https:\/\/ve2cuy.com\/420-1c4\/index.php\/wp-json\/wp\/v2\/media?parent=2688"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}