1. 程式人生 > >#if 和 #ifdef

#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 ,所以會編譯中間的程式碼,否則忽略。