定義宏的時候不指定一個值得時候就被稱爲無值宏定義,通常無值宏會使用在條件編譯當中: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