#if 和 #ifdef 條件編譯注意


之前寫程序很少用到這兩個條件編譯,只是在頭文件的開頭使用過 #ifdef ....<CODE>....  #endif,他是防止頭文件被重復包含,導致的變量被多處聲明或定義。

最近寫程序發現 #if ...... #endif  也是特別好用的。

 

#if

他的后面是接一個表達式

#if (if_need_display)
        //使用C語言庫函數 sprintf() 把數字強制轉換為字符串輸出,這樣真的可以減少很多工作量,比上面簡單太多了。
        sprintf(distance,"%.2f",real_distance);
        show_string(5+72,10,distance);
#endif

這個后面我跟了一個定義的宏,if_need_display,當我需要使用中間那段代碼的時候,只需把這個變量宏定義為1就可以了。

就是當表達式為真(非零值)時,那么編譯器就會把 #if 與 #endif 之間的代碼編譯進去。它多用在需要調試的代碼中。

因為有些代碼非常占程序的體積,或者非常消耗單片機的資源 ,但是它在調試的時候又比較有用,調試完之后,就用不到了,比如串口,顯示屏什么的。

這個時候, #if 就顯得特別的貼心,溫暖。

 

#ifdef 

#ifdef 后面跟一個宏,這個宏可以沒有值,只要在前面這個宏被定義了出來,就編譯中間的代碼。

#define if_need_display

#ifdef if_need_display
        //使用C語言庫函數 sprintf() 把數字強制轉換為字符串輸出,這樣真的可以減少很多工作量,比上面簡單太多了。
        sprintf(distance,"%.2f",real_distance);
        show_string(5+72,10,distance);
#endif

這里,我宏定義了if_need_flag ,所以會編譯中間的代碼,否則忽略。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM