在C++中,#ifndef
是一個預處理指令,用于防止頭文件被多次包含。它的工作原理是檢查括號內的宏是否已經定義。如果沒有定義,則編譯器會執行接下來的代碼,直到遇到#endif
。如果已經定義,編譯器會跳過這部分代碼。
#ifndef
通常與其他預處理指令配合使用,以確保頭文件的內容只被包含一次。以下是一些常見的預處理指令和它們的用法:
#ifndef
和 #define
配合使用:#ifndef HEADER_H
#define HEADER_H
// 頭文件內容
#endif // HEADER_H
在這個例子中,如果HEADER_H
沒有被定義,編譯器會執行#ifndef HEADER_H
和#endif
之間的代碼。如果HEADER_H
已經被定義,編譯器會跳過這部分代碼。
#ifndef
和 #define
配合使用,但帶有一個值:#ifndef HEADER_H_VALUE
#define HEADER_H_VALUE
// 頭文件內容
#endif // HEADER_H_VALUE
在這個例子中,我們為HEADER_H
定義了一個值(例如1
),而不是一個簡單的標識符。這可以用于避免與其他頭文件的命名沖突。
#ifndef
和 #else
配合使用:#ifndef HEADER_H
#define HEADER_H
// 頭文件內容
#else
// 其他代碼,當HEADER_H未被定義時執行
#endif // HEADER_H
在這個例子中,如果HEADER_H
沒有被定義,編譯器會執行#ifndef HEADER_H
和#endif
之間的代碼。如果HEADER_H
已經被定義,編譯器會執行#else
和#endif
之間的代碼。
#ifndef
和 #elif
以及 #endif
配合使用:#ifndef HEADER_H
#define HEADER_H
// 頭文件內容
#elif defined(ANOTHER_HEADER)
// 其他代碼,當HEADER_H未被定義但ANOTHER_HEADER被定義時執行
#endif // HEADER_H
在這個例子中,我們檢查了兩個宏:HEADER_H
和ANOTHER_HEADER
。如果HEADER_H
未被定義但ANOTHER_HEADER
被定義,編譯器會執行#elif defined(ANOTHER_HEADER)
和#endif
之間的代碼。