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 に答える