4

重複の可能性:
ボイドキャスティングは何をしますか?

私はちょうどプロジェクトを閲覧していて、これを見つけました

//This is in a .cpp file 
#if xxx == 5
(void)var;
#endif

これは何をし(void)varますか?これを行う上での重要性。と関係があると聞いたことがありcompilationます。

これが一般的である場合に備えて、c と cpp タグの両方を追加します。

4

2 に答える 2

7
(void)var;

このステートメントは事実上何もしません。ただし、コンパイラのサイレンシングに役立ちます。

これは主に、未使用の変数の警告を回避するために行われます。


@vonbrand のコメントへの返信。これが役立つ状況を以下に示します。

  • 関数はヘッダー ファイルで宣言されます。しかし、関数本体が変更され、そのパラメーターの 1 つが使用されなくなりました。ただし、ヘッダーを変更するには、このヘッダー ファイルを使用している他のコードをテストする必要があります。
  • 新しい関数が作成されますが、関数が後で変更されると、現在unsedになっているパラメーターが使用されます。それ以外の場合は、ヘッダーと定義で関数プロトタイプを変更する必要があります。

たとえば、gcc では-Werror、makefile でコンパイル オプションがデフォルトで使用され、プロジェクト全体で変更することが望ましくない場合があります。その上、それは完全に無害であり(void)var;、任意の変数に対して実行できます。したがって、状況によってはプログラマーの生活を楽にすることがなぜ悪い考えなのか、私にはわかりません。

したがって、未使用の変数を削除することが常に望ましいとは限りません。これを行うと、後で必要になったときにさらに多くの作業が必要になります。

于 2013-01-29T13:38:56.087 に答える
3

void へのキャストは、未使用の変数に関するコンパイラの警告を回避するために行われます。

これは、コンパイラのフラグ -Wno-unused-variable を使用してグローバル レベルで行うこともできます。

于 2013-01-29T13:48:05.530 に答える