我对Include Guards有些困惑

时间:2013-07-22 16:24:32

标签: c++ c-preprocessor

我有两个文件,第一个文件名为main.cpp,包含main函数,第二个文件名为class.h,包含类的声明。
我在同一个文件中包含<iostream>文件,因为每个文件都需要该文件 文件。

我想从第二个文件中检查文件iostream是否已包含在第一个文件main.cpp中,但不再包含它。

我做了什么

// main.cpp
#include <iostream>
#include "class.h"

//class.h
#ifndef iostream_H
 #include <iostream>
#endif

该代码是否正确?如何确保它不再包含该文件?

2 个答案:

答案 0 :(得分:6)

“我想从第二个文件中检查文件iostream是否已经包含在第一个文件main.cpp中,不再包含它。”您不需要 - 包含您需要的任何文件 - 不要依赖其他文件包含

<iostream>有自己的包含警卫,所以即使它被多次包含,也没关系。

如果class.hmain.cpp都需要<iostream>进行编译,则两者都应包含它。

答案 1 :(得分:4)

除了Luchian Grigore said之外。

外部包含警卫(如OP中的那些)违反封装,因为您需要知道头文件的内部细节,即警卫的名称。

此外,这些名称不是标准化的,因此,外部包括防护装置不可携带。

因此,请勿使用外部包含防护装置。将内部包含防护添加到您自己的头文件中,并确保其他所有人(包括标准库)都这样做。