头部防护的目的

时间:2010-06-05 06:15:00

标签: c++

在C ++中,C ++程序中头文件保护的目的是什么。

从net我发现这是为了一次又一次地防止包含文件,但是头部保护如何保证这一点。

2 个答案:

答案 0 :(得分:20)

保护标头(或更常规的“包括保护”)是为了防止头文件被包含多次出现问题; e.g。

#ifndef MARKER
#define MARKER
// declarations 
#endif

第一次这个文件是#include时,MARKER预处理器符号将是未定义的,因此预处理器将定义符号,并且以下声明将包含在由编译器。在后续#include上,将定义MARKER符号,因此预处理器将删除#ifnde / #endif中的所有内容。

为了使其正常工作,MARKER符号需要针对可能为#include的每个头文件进行不同的编辑。

这种事情必要的原因是在C / C ++中在编译单元中多次定义具有相同名称的类型或函数是非法的。防护允许头文件到#include其他头文件,而不必担心这可能导致一些声明被多次包含。


简而言之,它不会阻止来自#include一次又一次的文件。相反,它允许你执行此操作而不会导致编译错误

答案 1 :(得分:2)

标题保护的目的是防止某些代码每个翻译单元只出现一次的问题。

一个例子是结构。即使第二个定义相同,也无法重新定义结构。因此,如果您尝试编译以下内容:

struct foo { int x; };
struct foo { int x; };

由于重新定义,编译器将失败。

可能很难保证您只包含一次标头(当标头包含其他标头时会发生这种情况)。如果您的标头具有结构定义,则会导致编译失败。标题保护是一个简单的技巧,所以即使标题被多次包含,它的内容也只出现一次。