面試題
- 猜一下哪段代碼會被
編譯進去,強調下是編譯進去,不是執(zhí)行
#define XXX 0
// 第一段條件編譯
#ifdef XXX
邏輯1
#else
邏輯2
#endif
// 第二段條件編譯
#if XXX
邏輯1
#else
邏輯2
#endif
- 答案
- 第一段條件編譯:
邏輯1會被編譯進去
- 第二段條件編譯:
邏輯2會被編譯進去
總結
-
#if既關心宏是否定義,又關心宏的邏輯的真假
-
#ifdef(#if defined())、#ifndef(#if !defined())僅僅關心宏是否被定義,不關心宏的邏輯真假
#ifdef
#ifdef 宏
邏輯1
#else
邏輯2
#endif
-
#ifdef只關心宏是否被定義,不關心宏邏輯的真假
- 舉例:
#define 宏 1 和 #define 宏 0 等效,都等同于 #define 宏
#if
#if 宏
邏輯1
#else
邏輯2
#endif
常見預編譯指令總結
-
#if、#elif、#else、#endif使用示例
#if 條件1
代碼段1
#elif 條件2
代碼段2
.
.
.
#elif 條件n
代碼段n
#else
代碼段 n+1
#endif
-
#ifdef、#ifndef、#else、#endif使用示例
// 如果定義了macro_name宏就編譯代碼段1
#ifdef macro_name
代碼段1
#else
代碼段2
#endif
// 等價于上面的條件編譯指令,如果未定義macro_name宏,就編譯代碼段1
#ifndef macro_name
代碼段2
#else
代碼段1
#endif
-
#if defined() 和 #ifdef 的比較
#ifdef MACRO_1
#ifdef MACRO_2
代碼段A
#endif
#endif
// 等價于上面的條件編譯指令
#if defined(MACRO_1) && defined(MACRO_2)
代碼段A
#endif
-
#if !defined() 和 #ifndef 的使用同上
強調兩點
- 這幾個宏定義只是決定代碼塊
是否被編譯
- 別忘了
#endif
參考鏈接
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。