Existe uma maneira de suprimir avisos no Xcode?

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 header, recebo um aviso sobre a compilation. Eu sei que posso adicioná-lo ao meu header para parar o aviso, mas eu estou querendo saber se há uma maneira diferente de adicioná-lo ao header (para que eu possa manter os headers limpos e padrão) para suprimir o aviso? Um pragma ou algo assim?

Para desativar os avisos em uma base por arquivo, usando o Xcode 3 e o llvm-gcc-4.2, você pode usar:

 #pragma GCC diagnostic ignored "-Wwarning-flag" 

Onde nome de aviso é algum sinalizador de aviso do gcc.

Isso substitui quaisquer sinalizadores de aviso na linha de comando. Não funciona com todos os avisos. Adicione -fdiagnostics-show-option às suas CFLAGS e você poderá ver qual sinalizador pode ser usado para desabilitar esse aviso.

existe uma maneira mais simples de suprimir avisos de variables ​​não usadas:

 #pragma unused(varname) 

EDIT: fonte: http://www.cocoadev.com/index.pl?XCodePragmas

ATUALIZAÇÃO: Eu vim com uma nova solução, mais robusta

  1. Abra a guia Projeto> Editar Destino Ativo> Construir.
  2. Em User-Defined : localize (ou crie se você não encontrar um) a chave: GCC_WARN_UNUSED_VARIABLE defina como NO .

EDIT-2 Exemplo:

 BOOL ok = YES; NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self); 

o compilador mostra o aviso de variável não usada para ok .

Solução:

 BOOL ok = YES; #pragma unused(ok) NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self); 

PS: Você também pode definir / redefinir outro aviso: GCC_WARN_ABOUT_RETURN_TYPE : YES/NO

Para o gcc você pode usar

 #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wshadow-ivar" // your code #pragma GCC diagnostic pop 

Você pode aprender sobre o pragma do GCC aqui e obter o código de aviso de um aviso no Navegador de Log (Command + 7), selecionar a compilation mais avançada, expandir o log (o botão ‘=’ à direita) e rolar para o parte inferior e lá seu código de aviso está entre colchetes como este [-Wshadow-ivar]

Para clang você pode usar

 #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wshadow-ivar" // your code #pragma clang diagnostic pop 

Para suprimir um aviso para um arquivo individual, faça o seguinte:

selecione o arquivo no projeto xcode. pressione obter informações ir para a página com opções de compilation digite -Wno- para negar um aviso:

-Wno-

por exemplo

-Wno-unused-parameter

Você pode obter o nome do aviso, se olhar nas configurações do projeto, observar os avisos do GCC localizados na parte inferior da página da guia de construção, clicando em cada aviso que informará o nome do parâmetro de aviso:

por exemplo

Avisar sempre que um parâmetro de function não for utilizado além de sua declaração. [GCC_WARN_UNUSED_PARAMETER, -Wunused-parameter]

Para se livrar do aviso: tente criar uma interface de categoria para o object em questão

 @interface NSTheClass (MyUndocumentedMethodsForNSTheClass) -(id)theUndocumentedMethod; @end ... @implementation myClass : mySuperclass -(void) myMethod { ... [theObject theUndocumentedMethod]; ... } 

Como um aparte, aconselho vivamente a não chamar methods não documentados no código de expedição. A interface pode e vai mudar, e será sua culpa.

Com o Objective-C, vários erros graves aparecem apenas como avisos. Não só nunca desabilito avisos, como normalmente ligo “Tratar avisos como erros” (-Werror).

Todo tipo de aviso em seu código pode ser evitado fazendo-se as coisas corretamente (normalmente, lançando objects no tipo correto) ou declarando protótipos quando você precisar deles.

http://nshipster.com/pragma/#inhibiting-warnings – pule para inibir a seção de avisos

Crie um novo arquivo de header separado chamado ‘Undocumented.h’ e adicione-o ao seu projeto. Em seguida, crie um bloco de interface para cada class para a qual você deseja chamar funções não documentadas e atribua a cada uma delas uma categoria ‘(Não documentado)’. Em seguida, inclua apenas esse arquivo de header em seu PCH. Dessa forma, seus arquivos de header originais permanecem limpos, há apenas um outro arquivo para manter, e você pode comentar uma linha na sua PCH para reabilitar 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 seletivamente ativar / desativar avisos individuais, comentando ou descomentando os protótipos individuais.

Suprimir esse aviso específico não é seguro. O compilador precisa conhecer os tipos de argumentos e retornar 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 irá adivinhar que o método leva um double, não um float. Isso pode causar falhas e valores interpretados incorretamente. No exemplo acima, em uma pequena máquina endian como as máquinas intel, o método receptor veria 0 passado, não 1.

Você pode ler o porquê nos documentos i386 da ABI , ou pode corrigir seus avisos. 🙂