之前寫程序很少用到這兩個條件編譯,只是在頭文件的開頭使用過 #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 ,所以會編譯中間的代碼,否則忽略。