2010-04-20 2 views
5

Sto costruendo il mio programma con il flag -pedantic, che causa un errore extra ';' (a causa di un'intestazione di terze parti che utilizza alcune macro in modo incoerente; non mostrato quando -pedantic è spento). Non ho proprio voglia di spegnere -pedantic, né di modificare l'intestazione. C'è un modo per sopprimere questo errore esatto? Come un commutatore -Wno-annoying-semicolon-error o qualcosa del genere?Soppressione di "extra"; "" errore in GCC quando -pedantic è su

+0

Perché si vuole utilizzare saccente? guardando http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Options sembra che non ci sia modo di fare ciò che vuoi. sicuramente se l'uso di pedantic è semplicemente basato su un sentimento, starai meglio senza di esso ;-) –

+0

Beh, non solo sentimento :) Ci sono alcuni forti consigli che devo seguire –

+0

Hmmm ingannevole. Non credo che l'intestazione di terze parti sia open source? Qualche possibilità di risolverlo? –

risposta

1

Per ovviare a questo problema, rimuovere -pedantic. Nient'altro funzionerà su quel caso.

+0

... o per risolvere il codice buggato. Ahimè. –

+0

@RomanD Un extra punto e virgola è davvero "buggato"? –

+0

@KyleStrand In realtà non è "buggato", ma neanche completamente corretto. Non ricordo quale libreria mi abbia causato questo problema quattro anni fa, ma c'era qualche magia magica che ha portato a questo problema. –

2

Utilizzare -isystem piuttosto che -I quando si superano i percorsi di inclusione, quindi GCC non ti avviserà delle intestazioni di sistema.

Per tutte le intestazioni gestite, è sufficiente modificarle.

+0

Non ha funzionato per me. Incluso la libreria con -isistema ma sono stati lanciati degli avvisi per il cross-compilatore linux-> apple, ma sicuramente funziona per g ++ e clang – Flamefire

2

È possibile eliminare gli avvisi pedanti per le intestazioni esterni come questo:

//save compiler switches 
#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wpedantic" 

//Bad headers with problem goes here 
#include <ros/ros.h> 
#include <sensor_msgs/LaserScan.h> 

//restore compiler switches 
#pragma GCC diagnostic pop