Existe uma maneira de suprimir avisos no Xcode?
Por exemplo, estou chamando um método não documentado e, como o método não está no cabeçalho, recebo um aviso ao compilar. Sei que posso adicioná-lo ao meu cabeçalho para interromper o aviso, mas gostaria de saber se há outra maneira além de adicioná-lo ao cabeçalho (para que eu possa manter os cabeçalhos limpos e padrão) para suprimir o aviso. Um pragma ou algo assim?
objective-c
xcode
cocoa
cocoa-touch
suppress-warnings
kdbdallas
fonte
fonte
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);
Respostas:
Para desativar os avisos por arquivo, usando Xcode 3 e llvm-gcc-4.2, você pode usar:
Onde o nome do aviso é algum sinalizador de aviso do gcc.
Isso substitui todos os sinalizadores de aviso na linha de comando. Porém, não funciona com todos os avisos. Adicione -fdiagnostics-show-option ao seu CFLAGS e você pode ver qual sinalizador pode usar para desativar esse aviso.
fonte
#pragma GCC diagnostic ignored "-Wwarning-flag"
já foi removidowarning-flag
por um dos avisos listados em gcc.gnu.org/onlinedocs/gcc/Warning-Options.htmlexiste uma maneira mais simples de suprimir avisos de variáveis não utilizadas :
EDIT: fonte: http://www.cocoadev.com/index.pl?XCodePragmas
ATUALIZAÇÃO: descobri uma nova solução, mais robusta
User-Defined
: encontre (ou crie, se não encontrar) a chave:GCC_WARN_UNUSED_VARIABLE
defina-a comoNO
.EDIT-2 Exemplo:
o compilador mostra um aviso de variável não utilizada para
ok
.Solução:
PS: Você também pode definir / redefinir outro aviso
GCC_WARN_ABOUT_RETURN_TYPE
::YES/NO
fonte
Para gcc você pode usar
Você pode aprender sobre o pragma GCC aqui e para obter o código de aviso de um aviso, vá para o Report Navigator (Command + 9), selecione a compilação superior, expanda o log (o botão '=' à direita) e role até o embaixo e lá o seu código de aviso está entre colchetes como este
[-Wshadow-ivar]
Para clang você pode usar
fonte
Para suprimir um aviso para um arquivo individual, faça o seguinte:
selecione o arquivo no projeto xcode. pressione obter informações vá para a página com as opções de compilação e digite -Wno- para negar um aviso:
por exemplo
Você pode obter o nome do aviso se olhar nas configurações do projeto, olhar os avisos do GCC localizados na parte inferior da página da guia de compilação, clicando em cada aviso, ele informará o nome do parâmetro de aviso:
por exemplo
fonte
...m:45:69: Incompatible pointer types sending...
abri a explicação da compilação e encontrei este aviso:[-Wincompatible-pointer-types]
acabei de renomeá-lo para-Wno-incompatible-pointer-types
e adicionei como um sinalizador ao meu.m
arquivo ... boom, não há mais avisos ... +10 if eu poderiaCom Objective-C, vários erros graves aparecem apenas como avisos. Não apenas nunca desabilito os avisos, mas também ativo "Tratar avisos como erros" (-Werror).
Todo tipo de aviso em seu código pode ser evitado fazendo as coisas corretamente (normalmente lançando objetos para o tipo correto) ou declarando protótipos quando você precisar deles.
fonte
Para se livrar do aviso: tente criar uma interface de categoria para o objeto em questão
Como um aparte, eu desaconselho fortemente chamar métodos não documentados no código de envio. A interface pode e vai mudar, e a culpa será sua.
fonte
http://nshipster.com/pragma/#inhibiting-warnings - pule para a seção de avisos de inibição
fonte
Crie um novo arquivo de cabeçalho separado chamado 'Undocumented.h' e adicione-o ao seu projeto. Em seguida, crie um bloco de interface para cada classe em que deseja chamar funções não documentadas e dê a cada uma uma categoria de '(Não documentado)'. Em seguida, basta incluir esse arquivo de cabeçalho em seu PCH. Desta forma, seus arquivos de cabeçalho originais permanecem limpos, há apenas um outro arquivo para manter e você pode comentar uma linha em seu PCH para reativar todos os avisos novamente.
Eu também uso este método para funções depreciadas em 'Depreciated.h' com uma categoria de '(Depreciated)'.
a melhor parte é que você pode ativar / desativar seletivamente os avisos individuais, comentando ou descomentando os protótipos individuais.
fonte
Suprimir esse aviso específico não é seguro. O compilador precisa saber os tipos de argumentos e retorna a um método para gerar o código correto.
Por exemplo, se você está chamando um método como este
[foo doSomethingWithFloat: 1.0];
que leva um float, e não há nenhum protótipo visível, então o compilador vai adivinhar que o método leva um double, não um float. Isso pode causar travamentos e valores interpretados incorretamente. No exemplo acima, em uma pequena máquina endian como as máquinas intel, o método do receptor veria 0 aprovado, não 1.
Você pode ler o motivo nos documentos i386 da ABI ou pode apenas corrigir seus avisos. :-)
fonte