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

时间:2013-05-26 07:39:37

标签: c++ include

如何检查一个标题是否包含c ++中的另一个标题?

例如,当我想知道是否包含,但包括两个标题和标题包含其他标题。所以我必须逐个检查源代码,那么是否有任何快速方法来查找是否包含另一?

3 个答案:

答案 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