條件編譯

無值宏定義

定義宏的時候不指定一個值得時候就被稱爲無值宏定義,通常無值宏會使用在條件編譯當中:code

#define __MAIN_H__ 
#define __TYPE_H__

注意
對於無值宏來講咱們只能判斷它是否被定義,而沒法判斷他的值編譯

保護宏

 在一個工程中,爲了防止某個頭文件被屢次包含,就會使用保護宏,防止預處理時被屢次展開,形成重定義的錯誤。gcc

#ifndef __MAIN_H__ 
#define __MAIN_H__    
    ......用戶代碼.......
#endif

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

條件編譯

 經過條件來判斷某一段代碼是否須要編譯。程序

#ifdef   DEBUG    // 若是宏定義條件成立,則這段代碼須要編譯,不然就不須要    
    printf("%d__%s__%s\n", __LINE__ , __FUNCTION__, __FILE__);    printf("%d__%s__%s\n", __LINE__ , __FUNCTION__, __FILE__); 
#endif 

#ifndef    DEBUG    // 若是宏沒有定義條件成立,則這段代碼須要編譯  
    printf("%d__%s__%s\n", __LINE__ , __FUNCTION__, __FILE__); 
#else               // 若是宏有定義則將編譯這一條    
    printf("%d__%s__%s\n", __LINE__ , __FUNCTION__, __FILE__);
#endif

條件編譯的使用場景

 能夠在編譯程序的時候在編譯命令後面增長一個宏的定義。demo

gcc demo.c -o demo -DDEBUG

注意:
在以上並以命令中 加上 -D 意味着定義一個 #define DEBUG 宏,
經過編譯語句來定義某個宏,來決定代碼當中某一部分代碼塊是否須要編譯。di

相關文章
相關標籤/搜索