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)?
Dlaczego, dlaczego dlaczego, dlaczego dlaczego, dlaczego chcesz wyłączyć ostrzeżenia? :(:( –
Ponieważ mój kod jest wolny od ostrzeżeń i nagłówki innych firm, jak powiedziałem, czasami zawierają ostrzeżenia – Fr0stBit
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 ... –