c++ - 如何查找与包含相关的问题 - 可视化包含树

标签 c++ c visual-studio include

<分区>

场景

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

c:\Programme\Microsoft Visual Studio 9.0\VC\ce\include\streambuf(55) : error C2143: syntax error : missing ')' before 'string'

一如既往,这是一条错误消息,当然我的代码中存在问题。但是,编译器无法告诉我哪里有问题。所以我在寻找常见的嫌疑人,例如 在某些头文件或类似文件中“使用 namespace XXX”。

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

具体问题

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

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

这样我就可以更好地确定错误位置。

最佳答案

我通常使用

cl /c /P /d1PP file.cpp

这将创建一个 file.i。这是经过预处理的文件 - 它包含所有已处理的 header ,即如果 header 的特定部分位于 ifdef something 下并且您尚未定义该内容,则它将不包含该 block 。/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

关于c++ - 如何查找与包含相关的问题 - 可视化包含树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15951728/

相关文章:

c++ - 从 VS 到 GCC 的 C/C++ 宏扩展产生错误

c++ - 直观地解释指针及其意义?

c - 我如何在 C 中进行这种巧妙的转换?

C 错误,简单的 scanf 函数,结果为 0

c# - 将 Blazor 项目与库项目引用发布到 Azure

c# - 如何在 visual studio 2010 中引用针对更高框架的程序集?

c++ - 是否在每次迭代时评估范围 for 语句中的表达式?

c++ - 具有很多参数的最佳编译方法(一种cpp程序)

C++哪个容器用于存储缓存内存

c# - 使 ListView.ScrollIntoView 将项目滚动到 ListView 的中心 (C#)