1

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

例如,当我想知道是否包含时,但是包含两个许多标题和标题包含其他标题。所以我必须一一检查源代码,那么有没有什么快速方法可以找到一个是否包含另一个?

4

3 回答 3

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不是标准的,因此它会使您的代码的可移植性降低。但是,它确实使用了更少的代码,并且可以避免名称冲突。

于 2013-05-26T08:30:54.767 回答
0

如果myheader.h有我们所说的包含保护,那么它通常会是#define一个名称为MYHEADER_H. 所以首先检查你的头文件是否有这种东西。

#ifdef如果是这样,您可以随时使用and#ifndef指令检查它是否已被包含(直到那时) 。

于 2013-05-26T08:14:19.163 回答
0

在某些情况下,其他答案中提到的标头保护是不够的(例如,您的文件在多个系统上使用或针对不同的版本或库构建,并且 hguard 不一致)。在这些情况下,您可以:

  • 查找该标头中的另一个标识符#defined
  • 或者只是用您自己的小包装标头替换您包含的该标头,该标头具有#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
    
于 2013-05-26T08:49:38.893 回答