2011-08-18 9 views
6

gcc 4.6.1のCソースコードをコンパイルする際に、次のような警告が表示されています。警告:変数は設定されていますが使用されていません[-Wunused-but-set-variable]

warning: variable set but not used [-Wunused-but-set-variable] 

私は、このリンクWunusedに参照さが、これは誰もがこの警告の原因とどのように我々はそれを取り除くことができているものをより詳細に教えてwarning.Would引き起こしている正確に何を得ることができますか?

[編集] 私は以下のコードスニペットを持っています。コンパイルには上記の警告が表示されます。どうすれば修正できるのか教えてください。

test_function(){ 
    BOOL BoolTest; 
    BoolTest = test_fucntion2(); 

    #ifdef CHECK 
    if (!BoolTest) { 
    misc_StartErrorReport(); 
    misc_ErrorReport("\n test_function2: Input not indexed.\n"); 
    misc_FinishErrorReport(); 
      } 
    #endif 
    // 
    BoolTest is no more used below it. 
    // } 

答えて

5

あなたはBoolTestの宣言と初期化周りプリプロセッサガードを含める必要があります。

test_function() 
{ 
#ifdef CHECK 
    BOOL BoolTest = test_function2(); 
#else 
    test_function2(); 
#endif 


#ifdef CHECK 
    if (!BoolTest) { 
     misc_StartErrorReport(); 
     misc_ErrorReport("\n test_function2: Input not indexed.\n"); 
     misc_FinishErrorReport(); 
    } 
#endif 

(これは、あなたはまだ、おそらくその副作用のために、CHECKが定義されていない場合でも、test_function2()を呼び出したいことを前提として - そうでない場合は、#elseセクションは不要で、2つの#ifdefブロックを1つにまとめることができます)。

5

変数は設定していますが、使用していません。例:

int foo = some_expression; 
//...code which does not use foo 

ただ削除できます。変数を設定

+0

しかし、私はそれを使用しています!なぜ私はこのエラーを見ているのか分からない。定義を削除すると、変数を定義せずに変数を使用しているという文句があります。定義を含めると、私はそれを使用していないと言います。この警告の原因は何ですか? – endolith

+2

@endolith:ああ、心配しないで。私はそれを使用していません。意味私はそれを(複数の場所で)設定しているだけで、その部分をまだ書いていないので、値が何であるかはテストしません。ダー。 – endolith

4

はそれを上記のプログラムの値(多分暗黙)

int main(void) { 
    int local1, local2; 
    local1 = 0; /* local1 set to 0 */ 
    local2 = 0; /* local2 set to 0 */ 
    return 0; 
} 

を割り当てるされ、両方の変数を値に設定したが、それらは使用しませんでした。私は

int local2 = local1; 

を有する第二のラインを交換する場合 は、今私はlocal1変数を使用している - との警告があなたのコードから割り当てを削除し、唯一の1

が警告を取り除くためにする必要があります。これは、今度は他の警告を作成する可能性があります。:)

2

これは、変数に値を割り当てることを意味しますが、後でその値をコード内で読み取ることはありません(したがって、verbage、 "set but not used" )。あなたは両方のusefuluseless値を与えるが、あなただけusefulで値を読み取る

int useful = 10; 
int useless = 3; 
if (useful) { 
    //Do stuff 
} 

お知らせ:たとえば。 通常、このメッセージが表示されたときは、変数を忘れていたり、変数を必要としないステートメントをインライン化する方法が見つかったことを意味します。

0

あなたはBoolTestを使用していません。コードとの違いはありません。

test_function(){ 
#ifdef CHECK 
if (!test_fucntion2()) {