【问题标题】:How know the exact file the symbol comes from如何知道符号来自的确切文件
【发布时间】:2020-11-02 15:41:42
【问题描述】:

我对包含文件有疑问。

假设您正在使用来自 Windows 标头的定义。当然,您可以知道定义宏的确切标头是什么。但问题是我们能否得到include 链并知道哪个路径导致宏被包含?

例如我有以下结构

windows.h // a windows header defines a macro

header1.h <- windows.h // a <- b means a includes b
header2.h <- windows.h
header3.h <- windoes.h
header4.h <- header1.h, header2.h
header5.h <- header1.h, header4.h, header3.h

如您所料,实际示例可能非常复杂,带有宏定义和ifdefs。

现在在我们的example.cpp#include "header4.h"#include "header5.h" 或两者中,我们在代码中使用windows.h 中的宏。如何知道什么是包含链?

例如对于这个例子,它可能是header4.h - header1.h - windows.h

【问题讨论】:

  • @ChrisMM 是的,它以某种方式相关。但我只关注层次结构的简单功能。如果我通过您的建议,我必须编译源代码,查看头文件的位置,然后获取层次结构。虽然我没有设法以这种方式找到它。
  • 这就是为什么我说它是相关的,而不是重复的。

标签: c++ c visual-studio include c-preprocessor


【解决方案1】:

我认为link 可能会对您有所帮助。你可以选择Architecture-&gt;Generate Graph of Include Files/Generate Code Map for solution without Building

【讨论】:

    【解决方案2】:

    使用 gcc 6.3.0,您可以使用 #pragma 技巧

    $猫so62875940.c #include #pragma 消息“so62875940.c” 诠释主要(无效){ 放(“富”); 返回0; } $ gcc so62875940.c so62875940.c:2:9:注意:#pragma 消息:so62875940.c #pragma 消息“so62875940.c” ^~~~~~~

    然后按照包含顺序...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 2020-09-20
      • 2016-05-29
      • 2019-09-11
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      相关资源
      最近更新 更多