3

设想

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

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

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

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

具体问题

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

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

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

4

1 回答 1

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

于 2013-04-11T14:50:58.160 回答