因此,最近我在一个工作场所进行了讨论,其中我质疑使用双重包含 guard 对单个 guard 的使用。我所说的双重保护如下:
头文件“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"
。我的同事告诉我,这为夹杂物增加了第二层保护,但是我看不到如果第一层确实完成了工作(或做到了吗?),那么第二层是多么有用。我能想到的唯一好处是,它可以彻底阻止链接程序费心查找文件。这是否是为了缩短编译时间(这没有被提及是有好处的),还是还有其他我看不到的东西在起作用?
最佳答案
我敢肯定,添加另一个包含后卫的做法是错误的做法:
#ifndef __HEADER_A_HPP__
#include "header_a.hpp"
#endif
原因如下:
关于c++ - 在C++中使用双重包含保护,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44629152/