¿Hay alguna forma de suprimir las advertencias en Xcode?
Por ejemplo, estoy llamando a un método no documentado y, dado que el método no está en el encabezado, recibo una advertencia al compilar. Sé que puedo agregarlo a mi encabezado para detener la advertencia, pero me pregunto si hay otra forma además de agregarlo al encabezado (para poder mantener los encabezados limpios y estándar) para suprimir la advertencia. ¿Un pragma o algo así?
objective-c
xcode
cocoa
cocoa-touch
suppress-warnings
kdbdallas
fuente
fuente
BOOL ok = [[NSCalendar currentCalendar] rangeOfUnit:NSMonthCalendarUnit startDate:&d interval:NULL forDate:self]; NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);
Respuestas:
Para deshabilitar las advertencias por archivo, usando Xcode 3 y llvm-gcc-4.2 puede usar:
Donde el nombre de advertencia es una bandera de advertencia de gcc.
Esto anula cualquier indicador de advertencia en la línea de comando. Sin embargo, no funciona con todas las advertencias. Agregue -fdiagnostics-show-option a su CFLAGS y podrá ver qué bandera puede usar para deshabilitar esa advertencia.
fuente
#pragma GCC diagnostic ignored "-Wwarning-flag"
que ya se eliminówarning-flag
con una de las advertencias enumeradas en gcc.gnu.org/onlinedocs/gcc/Warning-Options.htmlExiste una forma más sencilla de suprimir las advertencias de variables no utilizadas :
EDITAR: fuente: http://www.cocoadev.com/index.pl?XCodePragmas
ACTUALIZACIÓN: Me encontré con una nueva solución, una más robusta
User-Defined
: busque (o cree si no encuentra una) la clave:GCC_WARN_UNUSED_VARIABLE
configúrela enNO
.Ejemplo de EDIT-2:
el compilador muestra una advertencia de variable no utilizada para
ok
.Solución:
PD: también puede configurar / restablecer otra advertencia
GCC_WARN_ABOUT_RETURN_TYPE
::YES/NO
fuente
Para gcc puedes usar
Puede aprender sobre GCC pragma aquí y para obtener el código de advertencia de una advertencia, vaya al Navegador de informes (Comando + 9), seleccione la compilación más alta, expanda el registro (el botón '=' a la derecha) y desplácese hasta el abajo y allí su código de advertencia está entre corchetes como este
[-Wshadow-ivar]
Para clang puedes usar
fuente
Para suprimir una advertencia para un archivo individual, haga lo siguiente:
seleccione el archivo en el proyecto xcode. presione obtener información para ir a la página con opciones de compilación, ingrese -Wno- para negar una advertencia:
p.ej
Puedes obtener el nombre de la advertencia si miras en la configuración del proyecto las advertencias de GCC ubicadas en la parte inferior de la página de la pestaña de compilación, al hacer clic en cada advertencia, te dirá el nombre del parámetro de advertencia:
p.ej
fuente
...m:45:69: Incompatible pointer types sending...
abrí la explicación de la compilación y encontré esta advertencia:[-Wincompatible-pointer-types]
simplemente lo renombré-Wno-incompatible-pointer-types
y agregué como una bandera a mi.m
archivo ... boom, no más advertencias ... +10 si PodríaCon Objective-C, una serie de errores graves solo aparecen como advertencias. No solo nunca desactivo las advertencias, normalmente enciendo "Tratar las advertencias como errores" (-Werror).
Cada tipo de advertencia en su código puede evitarse haciendo las cosas correctamente (normalmente lanzando objetos al tipo correcto) o declarando prototipos cuando los necesite.
fuente
Para deshacerse de la advertencia: intente crear una interfaz de categoría para el objeto en cuestión
Aparte, recomiendo encarecidamente no llamar a métodos no documentados en el código de envío. La interfaz puede cambiar y cambiará, y será tu culpa.
fuente
http://nshipster.com/pragma/#inhibiting-warnings : pase a la sección de advertencias de inhibición
fuente
Cree un archivo de encabezado nuevo e independiente llamado 'Udocumented.h' y agréguelo a su proyecto. A continuación, cree un bloque de interfaz para cada clase a la que desee llamar funciones no documentadas y asigne a cada una una categoría de '(No documentado)'. Luego, solo incluya ese archivo de encabezado en su PCH. De esta manera, sus archivos de encabezado originales permanecen limpios, solo hay otro archivo que mantener y puede comentar una línea en su PCH para volver a habilitar todas las advertencias.
También utilizo este método para funciones depreciadas en 'Depreciated.h' con una categoría de '(Depreciated)'.
la mejor parte es que puede habilitar / deshabilitar selectivamente advertencias individuales comentando o descomentando los prototipos individuales.
fuente
Suprimir esa advertencia en particular no es seguro. El compilador necesita conocer los tipos de argumentos y regresa a un método para generar el código correcto.
Por ejemplo, si llamas a un método como este
[foo doSomethingWithFloat: 1.0];
que toma un flotante y no hay ningún prototipo visible, entonces el compilador adivinará que el método toma un doble, no un flotante. Esto puede provocar bloqueos y valores interpretados incorrectamente. En el ejemplo anterior, en una pequeña máquina endian como las máquinas Intel, el método del receptor vería que se pasa 0, no 1.
Puede leer por qué en los documentos ABI de i386 , o simplemente puede corregir sus advertencias. :-)
fuente