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

How-to find issues concerning includes - visualize inclusion tree

本文关键字:包含 问题 包含树 可视化 何查找 查找      更新时间:2023-10-16

场景

我不时在系统标头中收到编译器错误。目前例如:

c:\Programme\Microsoft Visual Studio 9.0\VC\ce\include\streambuf(55(:错误 C2143:语法错误:在"字符串"之前缺少"(">

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

我的

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

具体问题

有没有办法获得某种"包含树"?类似的东西

myClass.cpp
  + myClass.h
    + ios
      ...
      + streambuf

所以我将能够更好地确定错误位置。

我通常使用

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