繁体   English   中英

如何检查一个头文件是否包含c + +中的另一个头文件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM