我們以實例來演示:
------------------------------------------實驗①------------------------------------------
子函數:
主函數:
當定義了COMMENT_FLAG該宏,且其為0,則運行結果如下:只執行了sub_func_1函數。
------------------------------------------實驗②------------------------------------------
子函數:
主函數:
當定義了COMMENT_FLAG該宏,且其為1,則運行結果如下:執行了sub_func_0、sub_func_1函數。
實驗結論:
對于#if,宏COMMENT_FLAG被定義為1,則其條件編譯有效;宏COMMENT_FLAG被定義為0,則其條件編譯無效。其效果類似于 if 行為。
對于#ifdef,只要定義了宏COMMENT_FLAG,無論其是被定義為1或0,都可執行其條件編譯內容。
至于#ifndef的作用,與#ifdef是相反的,宏COMMENT_FLAG只要沒有被定義,則執行#ifndef的條件編譯。
還有一個#undef,可以在定義COMMENT_FLAG該宏后,取消其定義。簡單做個實驗:
在第48行,使用了 #undef COMMENT_FLAG,無任何運行結果,即sub_func_0、sub_func_1函數都沒有被執行。