2

その中に*.cpp/.h/.hpp*ファイル があるとしますが、ヘッダーファイル#include <map>によって定義または参照されているものは何も使用していません。mapVS に、含めたファイルのデータを使用しないという警告または何かを教えてもらいたいです。

Visual Studio 2012 (そのエディションのいずれか) は未使用のインクルードを表示しますか? (必須の回答には、簡単な「はい/いいえ」を含める必要があります)

4

3 に答える 3

4

この種の答えは、私を壁に押し上げます。他のすべての言語はこれを行います。すべての C++ 対応リンカがそれを行います。それは簡単です:

  1. すべてをコンパイルし、特にそのモジュールのシンボル テーブルを作成します。

  2. リンクします。

    • 使用されているが定義されていないものはすべて、すでにundefined externalエラーを生成します。
    • 定義されているが使用されていないものはすべて、extraneous external definition警告を生成する必要があります。その間、これらをソース ファイルごとにグループ化し、そのモジュール内のシンボルが参照されていない場合にのみ警告を生成します。
  3. また

    • 警告を表示する: 「やあ、君は本当にこれを使っているわけではない...だから...なんでもいいよ、乾杯」、または
    • 「未使用のインクルードを削除する」などのコンテキスト メニュー オプションを有効にしてクリーンアップします。

静的言語の場合、シンボル テーブルがあります。リンクすると、そのテーブルのどのアイテムが使用されているかがわかります。少なくとも使用されていないものすべてを強調表示するオプションを提供できます。

本当に必要な場合は、ビルドして上記の手順を実行し、使用されていない可能性のある参照削除してから再ビルドします。爆発した場合は、ロールバックします。

この問題を解決する方法は 100 通りあります。明らかにこれを行う IDE が存在しないという事実は驚くべきことです。

せめて「役に立つヒント」の選択肢にしてください。プログラマーの仕事をするのはコンパイラーの仕事ではありません。最終的な責任は椅子に座っている人間にあるという相互理解の下で、できる限り多くのプログラマーの仕事をするのが IDE の仕事です。

Source私は生計を立てるために C コンパイラを書いていました。

于 2013-12-15T01:07:22.843 に答える
3

インクルード ファイルから何も使用していないかどうかを確認する既知の方法はありません。ごく些細な場合を除いて、これは未解決の問題です。

次のインクルード ファイルを検討してください。

int x;

参照されているかどうかをどのように判断できますxか? そのファイルを含むコンパイル済みの出力は、 にアクセスする別のオブジェクト ファイルにリンクしている可能性がありますx。コンパイルされたオブジェクト ファイルは、一度に複数の方法でリンクされる場合があります。

于 2012-09-13T02:16:11.053 に答える
1

インクルード ファイルが不要かどうかを判断する最良の方法は、コメント アウトするか完全に削除して、コードがまだコンパイルされるかどうかを確認することです。これは、簡単に自動化できるプロセスです。

于 2012-09-13T03:04:27.420 に答える