代码之家  ›  专栏  ›  技术社区  ›  Suma

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

  •  9
  • Suma  · 技术社区  · 14 年前

    是否有某种工具(depency viewer?)或方法来查找“包含堆栈”(哪个源/哪个头/哪个头/…)包含一个特定的头文件?

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

    4 回复  |  直到 14 年前
        1
  •  12
  •   maxstrobel    7 年前

    有人发了帖子,但我找不到答案。 所以,在VS中,转到项目属性。选择配置属性/ C/C++ +高级/显示包括并设置“是”。

    然后编译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

        2
  •  8
  •   Brian Hooper    14 年前

    您正在搜索的头文件可能不会直接包含在源文件中。你只需要“预处理”代码。这可以在g++中通过使用-E选项来完成;我对visualc的了解还不够,不知道具体的规范是什么,但是如果你在“preprocess”的帮助中查找,你可能会发现一些东西。

        3
  •  6
  •   Gareth Stockwell    14 年前

    #error 在包含的头的顶部,您将从第一个头中得到一个编译错误 .cpp

        4
  •  1
  •   Suma    14 年前

    Visual Studio/showIncludes包括

    直接在visualstudio中,我发现了一个名为 /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
    

    还有一个名为 Include Manager 这似乎提供了一个非常好的视觉方式所需的功能。