2013-06-01 13 views
8

Podczas korzystania z dyrektywy #warning zamiast jednego ostrzeżenia otrzymuję dwa - ten, który generuję, plus dodatkowy warning: #warning is a GCC extension [enabled by default].Jak wyłączyć ostrzeżenie GCC o tym, że dyrektywa # ostrzegająca jest rozszerzeniem GCC?

Mogę zignorować wynik dyrektywy #warning z -Wno-cpp, ale jest to przeciwieństwo tego, co chcę.

Mogę obejść to, używając zamiast tego #pragma message(), ale wydaje się, że dyrektywa #warning jest raczej bezcelowa - czy nie ma sposobu na wyłączenie tego ostrzeżenia?

+1

Jakie opcje są przekazywane do GCC? –

+0

To było '-g -static -static-libgcc -Wall -Wextra -pedantic -Wno-vla -Wysizeof-pointer-memaccess -Wmissing-deklaracje -march = native -wyjątki -fexpensive-optimizations -flto -O3 -std = C++ 1y -fsanitize = address' w tym przypadku - zobacz moją odpowiedź poniżej, zdałem sobie sprawę, że była to opcja "sporna", która była odpowiedzialna. – Riot

Odpowiedz

3

Ach, wygląda na to, że opcja -pedantic włącza to ostrzeżenie, i nie wydaje się, aby było to określone przesłonięcie, ponieważ jest z większością innych ostrzeżeń GCC. Usunięcie -pedantic powoduje usunięcie ostrzeżenia o ostrzeżeniu.

0
#ifdef __GNUC__ 
#warning "no warning here!" 
#endif 

zostanie skompilowany z lub bez gcc, nawet z -pedantic, ale to wciąż daje ostrzeżenie, (a nie jeśli ostrzeżenia eskalacja błędów).

UPDATE: Według this related question, nie ma czyste rozwiązanie selektywnie wyłączyć ostrzeżenia o #pragma gnu specyficzne s

+0

Z pewnością to się skompiluje, ale to nie robi nic, aby pozbyć się ostrzeżenia: 'warning: #warning jest rozszerzeniem GCC [domyślnie włączone]' – Riot

+0

Tak, właśnie to sobie uświadomiłem. Desperacko szukając pragmy, żeby to przeklęte. (dodanie "#pragma diagnostyki GCC ignorowane" -Wunknown-pragmas "' nie wydaje się działać.) – wildplasser

0

Właściwie dodaje powinno działać. Dzięki temu można ukryć/zignorować ostrzeżenia gcc.

#pragma GCC diagnostic push 
#pragma GCC diagnostic ignored "-Wcpp" 

... 

#pragma GCC diagnostic pop 
+2

Chociaż jest to dobry pomysł, obawiam się, że to nie zadziała z -pedantic ostrzeżenia. Zobacz kod testowy tutaj: http://coliru.stacked-crooked.com/view?id=53358c525169b7c2750ed1eb09dff702-0f11904895a20602a6e5ca9f4b5b0039 – Riot