方案
我不时会在系统头文件中遇到编译器错误。目前例如:
c:\ Program \ Microsoft Visual Studio 9.0 \ VC \ ce \ include \ streambuf(55):错误C2143:语法错误:缺少')'在'string'之前
与往常一样,这是一条错误的错误消息,当然我的代码中存在问题。但是,编译器无法告诉我它在哪里受伤。所以我一直在寻找通常的嫌疑人,例如 在某些头文件或类似的东西中使用“使用名称空间XXX”。
我的问题是,我甚至不知道文件streambuf以哪种方式包含在我的代码中。至少我不直接包括它。
具体问题
有没有办法获得某种“包含树”? 像
这样的东西myClass.cpp
+ myClass.h
+ ios
...
+ streambuf
所以我可以更好地确定错误位置。
答案 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