[英]how to check if one header include another header in c++?
如何检查一个头文件是否包含c + +中的另一个头文件?
例如,当我想知道include,但是include两个头文件,并且header头文件包含其他头文件时,那么我必须一一检查源代码,那么有没有一种快速的方法来查找一个头文件是否包含另一个头文件呢?
您应该使用包含保护。 这将确保编译器不会多次包含标头内容。
使用标准包含保护的示例头文件MyClass.h
:
// MyClass.h
#ifndef MYCLASS_H
#define MYCLASS_H
// Your header contents goes here
#endif
这将确保编译器仅包含标头内容一次。
或者,您可以#pragma once
使用#pragma once
。
示例头文件MyClass.h
, #pragma once
使用非标准的#pragma once
:
// MyClass.h
#pragma once
// Your header contents goes here
请注意, #pragma once
不是标准的,因此它会使代码的可移植性降低。 但是,它确实使用较少的代码,并且可以避免名称冲突。
如果myheader.h
具有所谓的包含保护 ,则通常#define
一个名称为MYHEADER_H
的宏。 因此,请首先检查您的头文件是否具有此类内容。
如果是这样,则可以使用#ifdef
和#ifndef
指令在任何时候检查它是否已包括在内(到目前为止)。
在某些情况下,其他答案中提到的标头保护措施将不够用(例如,您的文件在多个系统上使用,或者是针对单独的版本或库构建的,并且hguard不一致)。 在这些情况下,您可以:
#define
d 或简单地用自己的小包装标头替换您包含的标头,该包装标头的#define
随平台/体系结构而变化,然后用包装标头替换#include
。 为了显示:
#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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.