#ifndef
是 C++ 預處理器中的一個指令,它的主要作用是防止頭文件被重復包含。當預處理器遇到 #ifndef
指令時,它會檢查括號內的宏是否已經定義。如果沒有定義,預處理器會繼續處理后面的代碼,直到遇到對應的 #endif
指令。如果宏已經定義,預處理器會跳過這部分代碼,直接跳到 #endif
指令的位置。
這種機制可以避免頭文件被多次包含時可能出現的重復定義錯誤。例如,假設有一個名為 header.h
的頭文件,我們希望在多個源文件中使用它,但不希望它被重復包含。我們可以這樣定義它:
#ifndef HEADER_H
#define HEADER_H
// 頭文件的內容
#endif // HEADER_H
這樣,當其他源文件嘗試包含 header.h
時,預處理器會發現 HEADER_H
宏尚未定義,因此它會包含頭文件的內容并定義 HEADER_H
宏。當同一個源文件再次嘗試包含 header.h
時,預處理器會發現 HEADER_H
宏已經定義,因此它會跳過頭文件的內容,直接跳到 #endif
指令的位置。這樣就避免了重復包含頭文件時可能出現的重復定義錯誤。