2011-08-18 26 views
6

He estado recibiendo la advertencia siguiente al compilar el código fuente C en el gcc 4.6.1.advertencia: conjunto de variables pero no utilizado [-Wunused-but-set-variable]

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

I referido a este enlace Wunused pero podría conseguir exactamente lo que está causando este warning.Would nadie me dijo en más detalle lo que está causando esta advertencia y cómo podemos deshacernos de él?

[EDITAR] Tengo un fragmento de código siguiente. La compilación muestra la advertencia mencionada anteriormente. ¿Podría sugerirme cómo puedo corregirlo?

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. 
    // } 

Respuesta

5

es necesario incluir los guardias del preprocesador alrededor de la declaración y la inicialización de 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 

(esto por supuesto que aún desea llamar test_function2() incluso si CHECK no está definido, presumiblemente por sus efectos secundarios - de lo contrario, no necesita la sección #else y puede combinar los dos bloques #ifdef en uno).

5

Está configurando una variable, pero luego no lo está usando. Por ejemplo:

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

Puede simplemente eliminarlo.

+0

¡Pero yo * estoy * usándolo! No entiendo por qué estoy viendo este error. Si elimino la definición, se queja de que estoy usando la variable sin definirla. Si incluyo la definición, dice que no la estoy usando. ¿Qué podría causar esta advertencia? – endolith

+2

@endolith: Oh, no importa. No estoy * usando * it. Lo que significa que solo lo estoy configurando (en varios lugares) y nunca pruebo cuál es el valor, porque todavía no he escrito esa parte. Duh. – endolith

4

Configuración de una variable es asignar un valor (tal vez de forma implícita)

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

En el programa anterior, ambas variables se establecen en un valor, pero que no estaban acostumbrados. Si se sustituye la segunda línea con

int local2 = local1; 

ahora han utilizado la variable local1 - y las advertencias deben ser solamente 1.

para deshacerse de la advertencia, borrar la asignación desde el código. Esto puede, a su vez, crear otras advertencias ... :)

2

Significa que asigna un valor a una variable, pero luego nunca lee ese valor más adelante en su código (de ahí el verbage, "establecer pero no usar")) Por ejemplo:

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

en cuenta que entregan ambos useful y useless valores, sino que sólo se lee el valor en useful. Normalmente, cuando recibo este mensaje, significa que olvidé una variable o encontré una forma de enlinear una declaración que ya no necesita esa variable.

0

No ha usado BoolTest. Puede ver que no hay diferencia entre su código y

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