内部包含卫哨:为了避免同一个编译单元包含同一个头文件的内容超过一次(会导致类型重复定义错误),需要在头文件里面使用内部包含卫哨。其实际上是使用预处理器的一种标志宏。举例如下:
//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_