Selektywnie wyłącza Ostrzeżenia GCC tylko dla części jednostki tłumaczeniowej?
Jaki jest najbliższy odpowiednik GCC dla kodu preprocesora MSVC?
#pragma warning( push ) // Save the current warning state.
#pragma warning( disable : 4723 ) // C4723: potential divide by 0
// Code which would generate warning 4723.
#pragma warning( pop ) // Restore warnings to previous state.
Mamy kod w powszechnie dołączanych nagłówkach, których nie chcemy generować. Chcemy jednak, aby pliki zawierające te nagłówki nadal generowały to Ostrzeżenie (jeśli projekt ma włączone to Ostrzeżenie).
4 answers
Jest to możliwe w GCC od wersji 4.6, czyli około czerwca 2010 roku w bagażniku.
Oto przykład:
#pragma GCC diagnostic push
#pragma GCC diagnostic error "-Wuninitialized"
foo(a); /* error is given for this one */
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wuninitialized"
foo(b); /* no diagnostic for this one */
#pragma GCC diagnostic pop
foo(c); /* error is given for this one */
#pragma GCC diagnostic pop
foo(d); /* depends on command line options */
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-20 02:00:42
Najbliższą rzeczą jest pragma diagnostyczna GCC, #pragma GCC diagnostic [warning|error|ignored] "-Wwhatever"
. To nie jest bardzo blisko tego, co chcesz, i zobacz link dla szczegółów i zastrzeżeń.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-08 14:28:21
Zrobiłem coś podobnego. W przypadku kodu stron trzecich nie chciałem widzieć żadnych ostrzeżeń. Zamiast więc podać -I/path/to/libfoo/include
, użyłem -isystem /path/to/libfoo/include
. To sprawia, że kompilator traktuje te pliki nagłówkowe jako "nagłówki systemowe" do celów ostrzeżeń i dopóki nie włączysz -Wsystem-headers
, jesteś w większości Bezpieczny. Nadal widziałem kilka ostrzeżeń wyciekających stamtąd, ale to zmniejsza większość śmieci.
Zauważ, że ten tylko pomoże ci, jeśli możesz wyizolować Kod przez include-directory. Jeśli jest to tylko podzbiór własnego projektu lub zmieszany z innym kodem, masz pecha.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-22 01:19:18
Jest to rozszerzenie do Odpowiedzi Matta Joinera .
Jeśli nie chcesz rozrzucać pragmatów na całym swoim kodzie, możesz użyć _pragma operatora :
#ifdef __GNUC__
# define DIAGNOSTIC_ERROR(w) _Pragma("GCC diagnostic error \"" w "\"")
# define DIAGNOSTIC_IGNORE(w) _Pragma("GCC diagnostic ignore \"" w "\"")
# define DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push")
# define DIAGNOSTIC_POP _Pragma("GCC diagnostic pop")
#endif
// (...)
DIAGNOSTIC_ERROR("-Wuninitialized")
foo(a); // Error
DIAGNOSTIC_PUSH
DIAGNOSTIC_IGNORE("-Wuninitialized")
foo(a); // No error
DIAGNOSTIC_POP
foo(a); // Error
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-02 16:32:20