2015-09-10 13 views
7

In codice C/C++ cerco di porto, un colpo di testa del sistema obsoleto è incluso:Disabilita #WARNING solo per un colpo di testa

Dal intestazione:

#ifdef __GNUC__ 
#warning "this header is deprecated" 
#endif 

Come si compila qui con gcc -Wall -Werror , la compilazione si interrompe. Nel lungo periodo, la sostituzione dell'uso di funzioni deprecate è la migliore, ma per ora voglio disabilitare solo questo avviso.

Compilare senza -Werror ovviamente funziona, ma poiché questo è parte di un processo di compilazione completamente automatizzato, preferisco non farlo.

Includere l'intestazione con #undef ing __GNUC__ prima e #define in seguito è una possibilità, ma sono preoccupato degli effetti collaterali all'interno dell'intestazione inclusa.

C'è un modo per disabilitare #warning o per rilassarsi -Werror solo per una intestazione?

+2

Non esiste un "codice C/C++". –

+1

C'è un motivo per cui le cose diventano deprecate. Invece di cercare di risolvere il problema, elimina il problema e smetti di usare l'intestazione deprecata. Se hanno deprecato l'intestazione, allora c'è sicuramente un modo migliore, più moderno per raggiungere i tuoi obiettivi. – Elkvis

+0

@LightnessRacesinOrbit: è un mix di codice C e C++. –

risposta

8

Si può fare questo con un (GCC specifico) diagnostic pragma

Se vi circondano l'inclusione con il seguente sarà disabilitare eventuali avvisi causati da #warning.

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wcpp" 
#include "header.h" 
#pragma GCC diagnostic pop 

Si noti che se si modifica il ignored-warning in quanto sopra il compilatore stampa ancora gli avvertimenti - semplicemente non agisce sulla bandiera -Werror per loro.

2

Questo disabilita esattamente un tipo di avvertimenti, la direttiva #WARNING, quindi suppongo che sia la soluzione più sicura a questo problema:

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-W#warnings" 
#include <evilheader.h> 
#pragma GCC diagnostic pop 

(Edit: Siamo spiacenti, si rivela gcc è in realtà clangore sul mio sistema, quindi potrebbe non funzionare con il tuo gcc originale)

+0

L'ho appena provato con gcc 4.7.2 e ho paura che sia una caratteristica specifica di clang. –

+0

@SimonGibbons sì. È divertente come il clang imiti GCC (ad esempio 'pragma GCC diagnostic'), ma lo fa meglio di GCC stesso :) – mojuba

+1

In suvated anche se non funziona con gcc originale perché anche il mio gcc è davvero clang. – JeremyP

Problemi correlati