objective c - ¿Cómo puedo eliminar una advertencia de "variable no utilizada" en Xcode?
objective-c compiler-warnings (10)
Entiendo exactamente por qué se producen advertencias 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).
NSError *error = nil;
BOOL saved = [moc save:&error];
NSAssert1(saved, @"Dude!!1! %@!!!", error);
Xcode informa que saved
es una variable no utilizada, cuando por supuesto no lo es. Sospecho que esto es porque NSAssert1
es una macro. La macro NS_BLOCK_ASSERTIONS
no está definida, por lo que las aserciones del Objetivo C definitivamente están 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.
En Xcode puede establecer las advertencias de "Variables no utilizadas". Vaya a "Configuración de compilación" para el objetivo y filtre con la palabra "sin usar"
Aquí hay una captura de pantalla:
Sugiero que solo lo cambies por Debug. De esta forma, no te perderás nada en tu versión de lanzamiento.
Esta es la forma en que lo haces en C y, por lo tanto, también en Objective-C.
Aunque no tenga activada 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];
EDITAR: los compiladores ignoran los moldes que se void
, por lo que no deberían afectar el rendimiento; es solo una bonita anotación humana limpia.
Haz que ocupe dos líneas. Separar la declaración y el valor predeterminado
BOOL enabled = NO;
// ...
BOOL enabled;
enabled = NO;
La única manera simple y portátil de marcar la variable utilizada es ... usarla.
BOOL saved = ...;
(void)saved; // now used
Sin embargo, puede estar contento con las extensiones específicas del compilador ya descritas.
No estoy seguro de si todavía es compatible con el nuevo compilador LLVM, pero GCC tiene un atributo "sin usar" que puede utilizar para suprimir esa advertencia:
BOOL saved __attribute__((unused)) = [moc save:&error];
Alternativamente (en caso de que LLVM no admita lo anterior), podría dividir la declaración de variable en una línea separada, garantizando que la variable se "usaría" ya sea que la macro se expanda o no:
BOOL saved = NO;
saved = [moc save:&error];
Puede configurar la advertencia "No" LLVM compliler 2.0 en "Release"
Usando Xcode 4.3.2 y descubrió que esto parece funcionar (menos escritura)
BOOL saved __unused;
intente con: __unused attribute. Funciona en Xcode 5
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-variable"
NSUInteger abc; /// Your unused variable
#pragma clang diagnostic pop
NSError *error = nil;
BOOL saved = [moc save:&error];
NSAssert1(saved, @"Dude!!1! %@!!!", error);
#pragma unused(saved)
Intenta así Está funcionando para mí. Te funcionará también.