确定哪个文件包含某些特定的头文件

时间:2010-08-09 09:04:07

标签: c++ c visual-studio-2005 header include

有时候使用复杂的标题结构时会出现一些标题,但很难分辨出来。

是否有一些工具(依赖性查看器?)或方法如何找到“包含堆栈”(哪个源/哪个标题/哪个标题/ ...)包含一个特定的头文件?

如果多次包含头文件,找到第一个包含就足够了,找到所有内容是一个值得欢迎的奖励。

4 个答案:

答案 0 :(得分:12)

有人发布了相关信息,但我找不到这个答案。 因此,在VS中,转到项目属性。选择Configuration Properties / C / C ++ / Advanced / Show Includes并设置“yes”。

然后编译你的cpp文件。它看起来像这样: cpp文件:

#include <stdio.h>

int main()
{
    return 0;
}

在编译后的输出窗口中,您将看到:

1>------ Build started: Project: stlport_project, Configuration: Release Win32 ------
1>Compiling...
1>stlport_project.cpp
1>Note: including file: D:\src\hrs_rt_059.00\HRS\modules\src\libs\src\external\stlport\5.1.7\stdio.h
1>Note: including file:  D:\src\hrs_rt_059.00\HRS\modules\src\libs\src\external\stlport\5.1.7\stl/_prolog.h
1>Note: including file:   D:\src\hrs_rt_059.00\HRS\modules\src\libs\src\external\stlport\5.1.7\stl/config/features.h

等等

编辑:引用相同的问题Displaying the #include hierarchy for a C++ file in Visual Studio

答案 1 :(得分:8)

您要搜索的标头可能未直接包含在源文件中。您需要'preprocess_only'代码。这可以通过使用-E选项以g ++完成;我不太了解视觉C以了解确切的规格是什么,但如果你查看“预处理”的帮助,你可能会想出一些东西。

答案 2 :(得分:6)

一种有点hacky的方法(但是它应该适用于任何平台/工具链,而不需要单独的依赖分析器)只需在包含的头部顶部添加#error - 然后您将获得编译来自包含它的第一个.cpp文件的错误。

答案 3 :(得分:1)

Visual Studio / showIncludes

直接在Visual Studio中我找到了一个名为/showIncludes的选项 - 输出只是文本的,但缩进的方式使得阅读非常简单:

Note: including file: /*..path.anonymized..*/\TCMalloc\windows\config.h
Note: including file:  /*..path.anonymized..*/\memalloc\tcmalloc\windows/port.h
Note: including file:   C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\windows.h
Note: including file:    C:\Program Files\Microsoft Visual Studio 8\VC\include\excpt.h
Note: including file:     C:\Program Files\Microsoft Visual Studio 8\VC\include\crtdefs.h
Note: including file:      C:\Program Files\Microsoft Visual Studio 8\VC\include\sal.h
Note: including file:      C:\Program Files\Microsoft Visual Studio 8\VC\include\vadefs.h
Note: including file:    C:\Program Files\Microsoft Visual Studio 8\VC\include\stdarg.h
Note: including file:    C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\windef.h
Note: including file:     C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\include\winnt.h
Note: including file:      C:\Program Files\Microsoft Visual Studio 8\VC\include\ctype.h
Note: including file:       C:\Program Files\Microsoft Visual Studio 8\VC\include\crtdefs.h

ProFactor Include Manager

还有一个名为Include Manager的VS加载项,它似乎以非常好的视觉方式提供所需的功能。