0

いくつかのコードを取得し、指定されたコードのすべての警告を削除しようとしました。

次のような特定の機能の場合:

sub_main(int /*argc*/, char** /*argv*/){

-------------
obj1* ptr1 = new obj1(xxx);
obj2* ptr2 = obj1->xxxx(xxxx)

-------------

}

このptr1とptr2は、この関数ではまったく使用されていません。(コメントアウトすると特定のエラーが発生するため、どこかで使用する必要があります)。

また、次のような未使用のパラメーターの警告を緩和する方法がいくつかあります

sub_main(int /*argc*/ )

また

sub_main(int a _ _ attribute_ _ ((unused)))

未使用の変数の場合、警告を緩和する同様の適切な方法はありますか?

gcc が警告を削除したり、makefile で警告を黙らせたりするために ifdef を実行したくありません。

ありがとう。

4

4 に答える 4

1

未使用の変数 var には、次を使用できます。

(void)var;
于 2014-05-13T14:13:22.973 に答える
0

警告が表示された場合、最初 (および 2 番目、おそらく 3 番目) のステップは、それを解決して削除することです。それが偽物であると本当に判断した場合にのみ、それを黙らせる必要があります.

あなたの場合、ptr1がまったく使用されていない場合は、宣言しないでください。それを削除すると、他の場所でエラーが発生すると言われました。これobj1は、コンストラクターでクレイジーなことを行うか (新しく作成されたインスタンスをどこかに登録するなど)、またはコード全体が混乱していることを意味します。前者の場合は、変数の定義を落として、ステートメントとして実行するだけですnew obj1(xxx);。ただし、最初にポインターがどこかに格納されることを確認し、式の横にコメントを付けてそれを文書化しnewます。

は型であり、適用できないため、の行ptr2はそのままコンパイルするべきではありません。しかし、私はあなたが実際に意味していたと思います。その場合、は実際に使用されており、削除するだけで済みます。単にそのままにして、 の宣言を呼び出しに置き換えるだけです。そして、指しているオブジェクトがリークされていないことを確認してください。obj1->ptr1->xxxx(xxx)ptr1ptr2ptr1ptr2ptr1->xxxx(xxx);ptr1

于 2014-05-13T14:24:03.820 に答える
0

この警告を回避する方法は、次のような関数を定義することです。

template <typename T> remove_warning_for_unused_variable(const T&) {}

そして、それを使用してください

remove_warning_for_unused_variable(variable);
于 2014-05-13T14:50:56.357 に答える