簡介
頭檔案衛士(Header File Safeguard)是C++條件編譯指令中一種最常見的用法。
作用?
頭檔案衛士的目的是要保護嵌套的包含指令中的內部連結屬性的名稱不被重複定義。
例子?
#ifndef DATE
#define DATE
struct Date{
int year,month,day;
};
#endif
#ifndef DATE 直到#endif是條件語句,是說:"如果沒有定義(聲明)全局常量DATE 則做什麼什麼"。
意即如果沒有定義名稱DATE的話,那現在馬上定義該名字,並且定義類型Date。馬上定義DATE名字的作用是在下一次該檔案若被重複include,編譯又遇到執行次指令的時候,因為曾經定義了DATE名字,所以使#ifndef編譯條件不滿足而直接跳過,一直跳到#endif。這樣就避免了類Date在一個程式檔案中被重複定義兩次。所以這樣的編譯指令組合稱為“頭檔案衛士”。
補充
由於該用法相對較複雜,實際上是把編譯器的工作交給了程式設計師來做。在微軟的編譯器中,提供了# pragma once 這種用法,放在每個頭檔案的開始,自動使編譯器避免重複包含,從而減輕了程式設計師的負擔,提高了程式穩定性和可移植性。試想統一定義大量不重複的#ifndef後面的字串是一項多么龐大的工程