2011-08-18 55 views
6

我在編譯gcc 4.6.1中的C源代碼時收到以下警告。警告:變量集但未使用[-Wunused-but-set-variable]

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

我refered這個鏈接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 

(這裏假設你仍然要調用test_function2()即使CHECK沒有定義,想必其副作用 - 如果沒有,那麼你不需要#else部分,你可以將兩個#ifdef塊組合成一個)。

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後來讀到值「設置,但不使用」 )。例如:你給這兩個usefuluseless值,但你只能在useful讀值

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

通知。 通常,當我收到此消息時,意味着我忘記了一個變量或找到了內聯不再需要該變量的語句的方法。

0

您還沒有使用過BoolTest。你可以看到你的代碼和

test_function(){ 
#ifdef CHECK 
if (!test_fucntion2()) { 
相關問題