天天看點

内部包含衛哨和外部包含衛哨

内部包含衛哨:為了避免同一個編譯單元包含同一個頭檔案的内容超過一次(會導緻類型重複定義錯誤),需要在頭檔案裡面使用内部包含衛哨。其實際上是使用預處理器的一種标志宏。舉例如下:

//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_

建議外部包含衛哨和内部包含衛哨使用同一個标志宏,則可以少定義一個宏。

繼續閱讀