2011-03-27 6 views
81

Entiendo exactamente por qué se producen advertencias de variables no utilizadas. No quiero suprimirlos en general, porque son increíblemente útiles en la mayoría de los casos. Sin embargo, considere el siguiente código (artificial).¿Cómo puedo eliminar una advertencia de "variable no utilizada" en Xcode?

NSError *error = nil; 
BOOL saved = [moc save:&error]; 
NSAssert1(saved, @"Dude!!1! %@!!!", error); 

Xcode informa que saved es una variable sin utilizar, por supuesto, cuando no lo es. Sospecho que esto es porque NSAssert1 es una macro. La macro NS_BLOCK_ASSERTIONS es no definida, por lo que las aserciones del Objetivo C están definitivamente habilitadas.

Si bien no duele nada, lo encuentro desordenado y molesto, y quiero suprimirlo, pero no estoy seguro de cómo hacerlo. Asignar la variable a sí mismo elimina la advertencia del compilador, pero preferiría hacerlo de la manera "correcta" si tal cosa existe.

Respuesta

96

estoy seguro de si todavía está apoyado en el nuevo compilador LLVM, pero GCC tiene un "sin usar" atributo se puede usar para suprimir la advertencia de que:

BOOL saved __attribute__((unused)) = [moc save:&error]; 

alternativa (en el caso LLVM no soporta lo anterior), se puede dividir la declaración de variables en una línea separada, lo que garantiza que la variable se "usa" si la macro se expande o no:

BOOL saved = NO; 
saved = [moc save:&error]; 
32

En Xcode se pueden establecer las advertencias de "variables no utilizadas. " Ir a "Configuración de creación" para el objetivo y el filtro con la palabra "sin usar"

Aquí está una captura de pantalla: Builld Settings Screenshot

sugiero sólo cambia para depuración. De esta forma, no te perderás nada en tu versión de lanzamiento.

+34

¿Echas de menos la parte de la pregunta donde Gregory dijo "No quiero suprimirlos en general, porque son increíblemente útiles en la mayoría de los casos"? –

+7

@ShermPendley Sin embargo, esto sigue siendo útil, respondió mi pregunta sobre cómo desactivarlo globalmente. – raffian

+9

apagando las advertencias es una gran manera de perder errores. Recomiendo encarecidamente en contra. –

92

El uso de Xcode 4.3.2 y descubrió que esto parece funcionar (menos de escritura)

BOOL saved __unused; 
+0

Esto no funciona, recibo una advertencia de que '' guardado '' se marcó como no utilizado pero se usó' –

21
NSError *error = nil; 
BOOL saved = [moc save:&error]; 
NSAssert1(saved, @"Dude!!1! %@!!!", error); 
#pragma unused(saved) 

Tratar como este. Me funciona. Te funcionará también.

+0

Esto no me funciona, me aparece una advertencia de que '' guardado '' se marcó como no utilizado, pero used' –

13

La única manera simple y portátil de marcar la variable utilizada es ... para usarla.

BOOL saved = ...; 
(void)saved; // now used 

Usted puede ser feliz con extensiones específicas del compilador ya descritos, sin embargo.

+2

Prefiero esto sobre el feo #pragma descrito anteriormente. – northernman

7

prueba con: atributo __unused. Trabaja en Xcode 5

4

Puede establecer "No" LLVM compliler 2,0 advertencia en "Release" enter image description here

1

Hacer que ocupa dos líneas. Separar la declaración de valor predeterminado y

BOOL enabled = NO; 

// ... 

BOOL enabled; 

enabled = NO; 
2

Ésta es la forma en que lo hace en C y por lo tanto también de Objective-C.

Aunque no tenga habilitada la advertencia, siempre es una buena idea marcar el valor de retorno como ignorado explícitamente. También muestra a otros desarrolladores que no se olvidó del valor de retorno; de hecho, ha optado explícitamente por ignorarlo.

(void)[moc save:&error]; 

EDIT: Los compiladores ignorar moldes a void, por lo que no debería afectar el rendimiento - es sólo una buena anotación humana limpia.

+0

En ciertos contextos, DEBE usar este truco para compilar el código Objective-C. Usar '(vacío)' es la manera más clara de hacerlo, ¡gracias! –

3
#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wunused-variable" 
    NSUInteger abc; /// Your unused variable 
#pragma clang diagnostic pop 

SOURCE

+0

Este es el enfoque más limpio ya que desactiva solo la advertencia entre esos #pragmas – cornr

-1

Si desea suprimir todas las advertencias en Xcode se puede realizar de la siguiente ir a Destino-> configuración de creación -> Swift Compilador - Advertencias Políticas -> suprimir advertencias -> SI

Cuestiones relacionadas