如何检查一个标题是否包含c ++中的另一个标题?
例如,当我想知道是否包含,但包括两个标题和标题包含其他标题。所以我必须逐个检查源代码,那么是否有任何快速方法来查找是否包含另一?
答案 0 :(得分:1)
你应该使用包含守卫。这将确保编译器不会多次包含标头内容。
示例头文件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
不是标准的,因此会降低您的代码的可移植性。但是,它确实使用较少的代码,并且可以避免名称冲突。
答案 1 :(得分:0)
如果myheader.h
具有我们称之为 include guard 的内容,那么它通常会#define
一个名称为MYHEADER_H
的宏。所以首先检查你的头文件是否有这种东西。
如果是,您可以使用#ifdef
和#ifndef
指令随时检查是否已包含(截至该点)。
答案 2 :(得分:0)
在某些情况下,其他答案中提到的标题保护是不够的(例如,您的文件在多个系统上使用,或者针对不同的版本或库构建,并且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