我一直在頭文件的開頭看到這樣的代碼: spa
#ifndef HEADERFILE_H #define HEADERFILE_H
並在文件的最後是 code
#endif
這樣作的目的是什麼? token
這些被稱爲#include警衛 。 get
包含標頭後,它會檢查是否認義了惟一值(在本例中爲HEADERFILE_H
)。 而後,若是未定義,則定義它並繼續到頁面的其他部分。 io
當再次包含代碼時,第一個ifndef
失敗,致使空白文件。 變量
這能夠防止雙重聲明任何標識符,例如類型,枚舉和靜態變量。 file
#ifndef <token> /* code */ #else /* code to include if the token is defined */ #endif
#ifndef
檢查給定標記在文件或包含文件中是否已經#defined
; 若是沒有,它包括它與結束#else
之間的代碼,或者,若是沒有#else
,則包括#endif
語句。 #ifndef
一般用於經過在包含文件後定義令牌並檢查令牌未設置在該文件的頂部來使頭文件具備冪等性。 bug
#ifndef _INCL_GUARD #define _INCL_GUARD #endif
這能夠防止屢次包含相同的頭文件。 di
#ifndef __COMMON_H__ #define __COMMON_H__ //header file content #endif
假設您已將此頭文件包含在多個文件中。 所以,第一次沒有定義__COMMON_H__時,它將被定義幷包含頭文件。 文件
下次定義__COMMON_H__時,它將再也不包含。