如何找到有关包含的问题 - 可视化包含树

时间:2013-04-11 14:41:50

标签: c++ c visual-studio include

方案

我不时会在系统头文件中遇到编译器错误。目前例如:

  

c:\ Program \ Microsoft Visual Studio 9.0 \ VC \ ce \ include \ streambuf(55):错误C2143:语法错误:缺少')'在'string'之前

与往常一样,这是一条错误的错误消息,当然我的代码中存在问题。但是,编译器无法告诉我它在哪里受伤。所以我一直在寻找通常的嫌疑人,例如 在某些头文件或类似的东西中使用“使用名称空间XXX”。

我的问题是,我甚至不知道文件streambuf以哪种方式包含在我的代码中。至少我不直接包括它。

具体问题

有没有办法获得某种“包含树”? 像

这样的东西
myClass.cpp
  + myClass.h
    + ios
      ...
      + streambuf

所以我可以更好地确定错误位置。

1 个答案:

答案 0 :(得分:2)

我通常使用

cl /c /P /d1PP file.cpp

这会创建一个file.i。这是预处理文件 - 它包含所有已处理的标题,即如果标题的特定部分位于ifdef之下&你没有定义那个东西,它不会包含那个块。 / d1PP(我认为没有文档)也会显示实际定义宏的位置。您还会在代码中以及在什么时候看到谁包含streambuf

然后我将file.i编译为

cl /c /Tp file.i (or cl /c /Tc file.i - if it's C and not C++)

要进行可视化,请尝试此操作 - http://www.codeproject.com/Articles/3478/Include-File-Hierarchy-Viewer