内部包含衛哨:為了避免同一個編譯單元包含同一個頭檔案的内容超過一次(會導緻類型重複定義錯誤),需要在頭檔案裡面使用内部包含衛哨。其實際上是使用預處理器的一種标志宏。舉例如下:
//stddef.h
#ifndef _STDDEF_H_INCLUDED_
#define _STDDEF_H_INCLUDED_
...... //頭檔案的内容
#endif // !_STDDEF_H_INCLUDED_
// xxx.cpp
#include "stddef.h"
#include "stddef.h" //No problem!
外部包含衛哨:當包含一個頭檔案的時候,如果能始終如一地使用外部包含衛哨,可以顯著地提高編譯速度,因為當一個頭檔案被一個源檔案反複包含多次時,可以避免多次查找和打開頭檔案的操作。舉例如下:
#if !defined(_INCLUDED_STDDEF_H_)
#include <stddef.h>
#define _INCLUDED_STDDEF_H_
#endif //!_INCLUDED_STDDEF_H_
建議外部包含衛哨和内部包含衛哨使用同一個标志宏,則可以少定義一個宏。