條件編譯
阿新 • • 發佈:2020-12-07
無值巨集定義
定義巨集的時候不指定一個值得時候就被稱為無值巨集定義,一般無值巨集會使用在條件編譯當中:
#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 巨集,
通過編譯語句來定義某個巨集,來決定程式碼當中某一部分程式碼塊是否需要編譯。