如何检查一个标头是否包含 C++ 中的另一个标头?
例如,当我想知道是否包含时,但是包含两个许多标题和标题包含其他标题。所以我必须一一检查源代码,那么有没有什么快速方法可以找到一个是否包含另一个?
您应该使用包含防护。这将确保编译器不会多次包含标头内容。
使用标准包含保护的示例头文件MyClass.h
:
// MyClass.h
#ifndef MYCLASS_H
#define MYCLASS_H
// Your header contents goes here
#endif
这将确保编译器只包含一次标头内容。
或者,您可以使用#pragma once
.
MyClass.h
使用非标准的示例头文件#pragma once
:
// MyClass.h
#pragma once
// Your header contents goes here
请注意,这#pragma once
不是标准的,因此它会使您的代码的可移植性降低。但是,它确实使用了更少的代码,并且可以避免名称冲突。
如果myheader.h
有我们所说的包含保护,那么它通常会是#define
一个名称为MYHEADER_H
. 所以首先检查你的头文件是否有这种东西。
#ifdef
如果是这样,您可以随时使用and#ifndef
指令检查它是否已被包含(直到那时) 。
在某些情况下,其他答案中提到的标头保护是不够的(例如,您的文件在多个系统上使用或针对不同的版本或库构建,并且 hguard 不一致)。在这些情况下,您可以:
#define
d或者只是用您自己的小包装标头替换您包含的该标头,该标头具有#define
不因平台/架构而异,然后将您#include
的 s 替换为包装标头。为了显示:
#ifndef MON_HGUARD_CXX_CSTDIO
#define MON_HGUARD_CXX_CSTDIO
// now replace the following #include with inclusion of this header
#include <cstdio>
#endif // MON_HGUARD_CXX_CSTDIO