2015-08-17 17 views
7

Poszukuję sposobu na zniesienie wszystkich możliwych ostrzeżeń, które mogę uzyskać za pomocą Gcc z dyrektywami pragma. Stworzyłem pewne makra strażnicze, które pomagają mi wyciszyć nagłówki stron trzecich z ostrzeżeń i na razie działają jak charms dla msvc i clang. Nadal brakuje mi prawidłowego sposobu używania pragmatów diagnostycznych Gcc w celu powstrzymania każdego ostrzeżenia w sekcji. Podam kilka przykładów:Jak wyłączyć wszystkie ostrzeżenia za pomocą dyrektyw pragma w GCC

W MSVC możemy to zrobić:

#pragma warning(push, 0) 
// Code that produces warnings... 
#pragma warning(pop) 

I szczękiem możemy to zrobić:

#pragma clang diagnostic push 
#pragma clang diagnostic ignored "-Wall" 
#pragma clang diagnostic ignored "-Wextra" 
// Code that produces warnings... 
#pragma clang diagnostic pop 

I kod, który jest w środku jest teraz bycie wyciszonym z ostrzeżeń na dobre.

I w gcc mamy też podobne dyrektyw Pragma z brzękiem i pomyślałam, że może próbować coś takiego:

#pragma GCC diagnostic push 
#pramga GCC diagnostic ignored "-Wall" 
#pragma GCC diagnostic ignored "-Wextra" 
// Code that produces warnings... 
#pramga GCC diagnostic pop 

Ale przechodząc -Wall i -Wextra w diagnostyce ignorowane Pragma w GCC nie działa jak brzękiem i nie wyłącza wszystkich możliwych ostrzeżeń. Zamiast tego przekazując konkretne ostrzeżenie wyłączyć prace:

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wunused-parameter" 
void foo (int x) // No longer getting "unused parameter 'x'" warning 
{ 
} 
#pragma GCC diagnostic pop 

Więc tylko obejście mogę myśleć tak daleko jest do długiej listy wszystkich GCC flag ostrzegawczych i używać ich jak powyżej. Czy istnieje bardziej eleganckie rozwiązanie? Jeśli nie, to gdzie mogę uzyskać pełną listę flag ostrzegawczych Gcc (korzystnie na prostej liście)?

+0

Dlaczego, dlaczego dlaczego, dlaczego dlaczego, dlaczego chcesz wyłączyć ostrzeżenia? :(:( –

+6

Ponieważ mój kod jest wolny od ostrzeżeń i nagłówki innych firm, jak powiedziałem, czasami zawierają ostrzeżenia – Fr0stBit

+0

Nagłówki "System" nie powinny mieć przecieku z powodu tej diagnostyki. ręcznie za pomocą '-I', zamiast tego użyj' -isystem' .Jednak rozwiązany. :) Następnie możesz włączyć swoje ostrzeżenia z powrotem (plus '-Werror'!), aby złapać błędy wprowadzane do twojego kodu w przyszłości. Twój kod może być ostrzeżenie wolne teraz, ale cały cel ostrzeżeń ma złapać, kiedy złamiesz go w przyszłości ... –

Odpowiedz

1

Documentation mówi:

W tej chwili tylko ostrzeżenia (zazwyczaj kontrolowane przez „-W ...”) mogą być sterowane i nie wszystkie z nich. Użyj -fdiagnostics-show-option, aby ustalić, które diagnostyki można kontrolować i która opcja je kontroluje.

+0

Jak korzystać z tej flagi? Czy mogę przekazać go do gcc w jakiś sposób, aby uzyskać listę opcji? – Fr0stBit

+0

Tak, budujesz swoje pliki z tą opcją, a to jest dds coś jak '[-Wunused-variable]' do każdego ostrzeżenia. – Heavy

+0

Ale nadal nie jest to pomocne, ponieważ moim celem jest znalezienie sposobu na zlikwidowanie wszystkich ostrzeżeń za pomocą mądrych dyrektyw lub zebranie listy zawierającej wszystkie kontrolowane ostrzeżenia. – Fr0stBit

Powiązane problemy