Pergunta

Ao desenvolver um aplicativo C ++, eu tive que usar uma biblioteca parte 3 que produziu uma enorme quantidade de avisos relacionados com a directiva #pragma inofensivo sendo usado.

../File.hpp:1: warning: ignoring #pragma ident
In file included from ../File2.hpp:47,
                 from ../File3.hpp:57,
                 from File4.h:49,

É possível desativar este tipo de avisos, quando usando o compilador GNU C ++?

Foi útil?

Solução

Eu acredito que você pode compilar com

-Wno-unknown-pragmas

para suprimir estes.

Outras dicas

No GCC, de compilação com -Wno-unknown-pragmas

Em MS Visual Studio 2005 (esta pergunta não é marcado com gcc, por isso estou adicionando este para referência), você pode desativar globalmente no Projeto Configurações> C / C ++ -> Avançado. Digite 4068 no "Avisos Disable específicas"

ou você pode adicionar este a qualquer arquivo para desativar avisos localmente

#pragma warning (disable : 4068 ) /* disable unknown pragma warnings */

GCC diagnóstico Pragmas ? Como alternativa, neste caso, você poderia usar o href="http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options" combinação de opções que -Wall permite, excluindo -Wunknown-pragmas.

Obrigado a cada um para a ponta. No meu caso, eu trabalho com Qt Mingw. Eu preciso flag set de outra forma, no meu arquivo .PRO:

QMAKE_CXXFLAGS_WARN_ON += -Wno-unknown-pragmas

Eu sei que a pergunta é sobre GCC, mas para as pessoas que querem fazer isso como portably possível:

A maioria dos compiladores que podem emitir este aviso tem uma maneira de desactivar o aviso a partir da linha de comando (exceção: IGP) ou em código (exceção: DMC):

  • GCC: -Wno-unknown-pragmas / #pragma GCC diagnostic ignored "-Wunknown-pragmas"
  • clang: -Wno-unknown-pragmas / #pragma clang diagnostic ignored "-Wunknown-pragmas"
  • Intel C / C ++ Compiler: -diag-disable 161 / #pragma warning(disable:161)
  • PGI: #pragma diag_suppress 1675
  • MSVC: -wd4068 / #pragma warning(disable:4068)
  • TI: --diag_suppress,-pds=163 / #pragma diag_suppress 163
  • IAR C / C ++ Compiler: --diag_suppress Pe161 / #pragma diag_suppress=Pe161
  • Digital Mars C / C ++ Compiler: -w17

Você pode combinar a maior parte deste em uma única macro para uso em seu código, que é o que eu fiz para o HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS macro em Hedley :

#if HEDLEY_HAS_WARNING("-Wunknown-pragmas")
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"")
#elif HEDLEY_INTEL_VERSION_CHECK(16,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)")
#elif HEDLEY_PGI_VERSION_CHECK(17,10,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675")
#elif HEDLEY_GNUC_VERSION_CHECK(4,3,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"")
#elif HEDLEY_MSVC_VERSION_CHECK(15,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068))
#elif HEDLEY_TI_VERSION_CHECK(8,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
#elif HEDLEY_IAR_VERSION_CHECK(8,0,0)
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161")
#else
#  define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
#endif

Note que Hedley pode ter informações mais completa do que esta resposta desde que eu provavelmente vou esquecer de atualizar esta resposta, por isso, se você não quiser usar apenas Hedley (é um único domínio público C / C ++ cabeçalho você pode facilmente cair em seu projeto), você pode querer usar Hedley como um guia, em vez das informações acima.

As verificações de versão são provavelmente excessivamente pessimista, mas às vezes é difícil obter boas informações sobre as versões obsoletas de compiladores proprietários, e eu prefiro prevenir do que remediar. Mais uma vez, informações de Hedley pode ser melhor.

Muitos compiladores também pode empurrar / pop avisos sobre uma pilha, para que possa empurrar, em seguida, desativá-los antes de incluir código que você não controla, em seguida, pop tão o código irá ainda acionar o aviso em pergunta (para que você possa limpá-lo). Existem macros para que em Hedley, também: HEDLEY_DIAGNOSTIC_PUSH / HEDLEY_DIAGNOSTIC_POP .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top