#if 和 #ifdef
阿新 • • 發佈:2019-02-05
之前寫程式很少用到這兩個條件編譯,只是在標頭檔案的開頭使用過 #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 後面跟一個巨集,這個巨集可以沒有值,只要在前面這個巨集被定義了出來,就編譯中間的程式碼。
#defineif_need_display #ifdef if_need_display //使用C語言庫函式 sprintf() 把數字強制轉換為字串輸出,這樣真的可以減少很多工作量,比上面簡單太多了。 sprintf(distance,"%.2f",real_distance); show_string(5+72,10,distance); #endif
這裡,我巨集定義了if_need_flag ,所以會編譯中間的程式碼,否則忽略。