前處理器之條件編譯
阿新 • • 發佈:2022-03-24
一. 認識預編譯指令
條件編譯相關的預編譯指令有如下幾個:
#define 定義一個預處理巨集
#undef 取消巨集的定義
#if 編譯預處理中的條件指令,類似於if
#ifdef 判斷某個巨集是否已經被定義,若被定義,執行之後的語句(是if not defined的縮寫)
#ifndef 和ifdef相反,若某個巨集為被定義,執行之後的語句(是if defined的縮寫)
#elif 若#if, #ifdef, #ifndef或前面的#elif條件不滿足,則執行#elif之後的語句,類似於else-if,是(else if的縮寫)
#else 若與#if, #ifdef, #ifndef對應, 若這些條件不滿足,則執行#else之後的語句,類似於else
#endif #if, #ifdef, #ifndef這些條件命令的結束標誌
defined 與#if, #elif配合使用,判斷某個巨集是否被定義
defined使用舉例
#if defined(MAX) && !defined(MIN)
二. 常用的條件編譯方法
最常見的條件編譯使用ifdef和ifndef,用於防止重複包含標頭檔案的巨集
#ifndef _AB_CD_H
#defind _AB_CD_H
//declaration codes
#endif //_AB_CD_H
從理論上講可以出現在任何地方(標頭檔案和實現檔案),通常為了防止標頭檔案被多次包含,在標頭檔案中使用是必須的。
標頭檔案的標識(即上面的_AB_CD_H)在理論上來說可以是自由命名的,但每個標頭檔案的這個“標識”都應該是唯一的。標識的命名規則一般是標頭檔案名全大寫,並把檔名中的“.”也變成下劃線(也有前後還要加上下劃線的寫法),如:stdio.h變為STDIO_H