2011-08-18 436 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()) { 
相关问题