#ifndef
是 C++ 中的一種預處理指令,它用于防止頭文件被多次包含。當預處理器遇到 #ifndef
指令時,它會檢查括號內的宏是否已經定義。如果沒有定義,預處理器會執行接下來的代碼,直到遇到 #endif
指令。如果宏已經定義,預處理器會跳過這部分代碼,直接跳到 #endif
指令的位置。
#ifndef
與其他預處理指令的區別在于它的作用。其他預處理指令包括 #define
(定義宏)、#include
(包含頭文件)、#if
(條件編譯)、#else
(條件編譯的另一種選擇)等。這些指令在編譯過程中起到不同的作用,但它們都不會影響頭文件的包含次數。
例如,#include
指令用于將一個頭文件的內容插入到當前文件中,#if
和 #else
指令用于根據條件選擇性地編譯代碼。然而,這些指令都無法防止頭文件被多次包含。
為了解決這個問題,C++ 提供了 #ifndef
指令。它與 #define
指令一起使用,可以確保頭文件只被包含一次。通常,我們在頭文件中使用 #ifndef
指令來檢查一個特定的宏是否已經定義。如果已經定義,預處理器會跳過整個頭文件的內容,從而避免了重復包含。例如:
#ifndef HEADER_H
#define HEADER_H
// 頭文件的內容
#endif // HEADER_H
在這個例子中,如果 HEADER_H
宏已經定義,預處理器會跳過整個頭文件的內容。如果 HEADER_H
宏沒有定義,預處理器會執行頭文件中的代碼,并在遇到 #endif
指令時停止。這樣可以確保頭文件只被包含一次,避免了重復定義的問題。