1. 程式人生 > 實用技巧 >條件編譯

條件編譯

無值巨集定義

定義巨集的時候不指定一個值得時候就被稱為無值巨集定義,一般無值巨集會使用在條件編譯當中:

#define __MAIN_H__ 
#define __TYPE_H__

注意
對於無值巨集來說我們只能判斷它是否被定義,而無法判斷他的值

保護巨集

 在一個工程中,為了防止某個標頭檔案被多次包含,就會使用保護巨集,防止預處理時被多次展開,造成重定義的錯誤。

#ifndef __MAIN_H__ 
#define __MAIN_H__    
    ......使用者程式碼.......
#endif 

注意:
保護巨集必須加在最前面,最後用#endif結尾。

條件編譯

 通過條件來判斷某一段程式碼是否需要編譯。

#ifdef  DEBUG // 如果巨集定義條件成立,則這段程式碼需要編譯,否則就不需要
    printf("%d__%s__%s\n",__LINE__,__FUNCTION__,__FILE__); printf("%d__%s__%s\n",__LINE__,__FUNCTION__,__FILE__); 
#endif 

#ifndefDEBUG  // 如果巨集沒有定義條件成立,則這段程式碼需要編譯
    printf("%d__%s__%s\n",__LINE__,__FUNCTION__,__FILE__); 
#else           // 如果巨集有定義則將編譯這一條 
    printf("%d__%s__%s\n",__LINE__,__FUNCTION__,__FILE__);
#endif 

條件編譯的使用場景

 可以在編譯程式的時候在編譯命令後面增加一個巨集的定義。

gcc demo.c -o demo -DDEBUG 

注意:
在以上並以命令中 加上 -D 意味著定義一個 #define DEBUG 巨集,
通過編譯語句來定義某個巨集,來決定程式碼當中某一部分程式碼塊是否需要編譯。