头部防护的目的

ckv*_*ckv 10 c++ include-guards

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

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

Ste*_*n C 21

保护头(或更常规的"包括保护")是为了防止头文件包含多次的问题; 例如

#ifndef MARKER
#define MARKER
// declarations 
#endif
Run Code Online (Sandbox Code Playgroud)

第一次使用此文件时#include,MARKER预处理程序符号将是未定义的,因此预处理程序将定义该符号,并且以下声明将包含在编译器看到的源代码中.在随后#include的时间,MARKER将定义符号,因此预处理器将删除#ifnde/中的所有内容#endif.

为了使其正常工作,MARKER对于可能为#include-ed的每个头文件,符号需要不同.

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


简而言之,它不会阻止#include一次又一次地处理文件.相反,它允许您执行此操作而不会导致编译错误.