因此,我最近在我的工作地点进行了讨论,其中我质疑使用双重包含保护而不是单个保护。我所说的双重保护如下:
头文件“ header_a.hpp”:
#ifndef __HEADER_A_HPP__
#define __HEADER_A_HPP__
...
...
#endif
在头文件或源文件中的任何位置包含头文件时:
#ifndef __HEADER_A_HPP__
#include "header_a.hpp"
#endif
现在,我知道在头文件中使用防护是为了防止多次包含已经定义的头文件,这是常见且有据可查的。如果已经定义了宏,则编译器会将整个头文件视为“空白”,并防止重复包含。很简单。
我不理解的问题是使用#ifndef __HEADER_A_HPP__
和#endif
周围#include "header_a.hpp"
。我的同事告诉我,这为夹杂物增加了第二层保护,但是我看不到如果第一层确实完成了工作(或做到了吗?),那么第二层是多么有用。
我能想到的唯一好处是,它彻底阻止了链接程序费心查找文件。这是否是为了缩短编译时间(这没有被提及是有好处的),还是还有其他我看不到的东西在起作用?