Dostaję wiele ostrzeżeń z kodu innej firmy, którego nie mogę modyfikować. Czy istnieje sposób na wyłączenie tego ostrzeżenia lub przynajmniej wyłączenie go dla niektórych obszarów (takich jak #pragma push / pop w VC ++)?
Przykład:
list.h:1122: warning: `list<LogOutput*, allocator<LogOutput*> >::node_alloc_' will be initialized after
list.h:1117: warning: `allocator<LogOutput*> list<LogOutput*, allocator<LogOutput*> >::alloc_'
g++
suppress-warnings
LK__
źródło
źródło
Odpowiedzi:
Upewnij się, że członkowie pojawiają się na liście inicjalizacyjnej w tej samej kolejności, w jakiej pojawiają się w klasie
lub możesz zawrócić
-Wno-reorder
źródło
b
aa
inicjalizacji może zależeć od siebie. Naiwny użytkownik może próbować zmienić kolejność inicjalizacji, aby uzyskać pewien efekt, a Ostrzeżenie wyraźnie wyjaśni, że nie działa.-Wno-reorder
bez wspominania, jakie problemy mogą do tego doprowadzić. Wiem, że OP nie poprosił o żadne inne szczegóły, ale tak wysoko głosowanej odpowiedzi spodziewam się przynajmniej wspomnieć o kontekście i zastrzeżeniach. Czy nie powinniśmy odpowiadać na pytanie, które OP powinien napisać?Możesz to wyłączyć za pomocą
-Wno-reorder
.źródło
Dla osób używających QT mających ten błąd, dodaj go do pliku .pro
źródło
use
-Wno-reorder
(man gcc jest twoim przyjacielem :))źródło
Jeśli widzisz błędy z nagłówków bibliotek i używasz GCC, możesz wyłączyć ostrzeżenia, włączając nagłówki używające
-isystem
zamiast-I
.Podobne funkcje istnieją w clang .
Jeśli używasz CMake, możesz określić
SYSTEM
dlainclude_directories
.źródło
SYSTEM
”?include_directories
wiersza.Kolejność inicjalizacji nie ma znaczenia. Wszystkie pola są inicjowane w kolejności ich definicji w swojej klasie / strukturze. Ale jeśli kolejność na liście inicjalizacji jest inna, gcc / g ++ generuje to ostrzeżenie. Zmień tylko kolejność inicjalizacji, aby uniknąć tego ostrzeżenia. Ale nie można zdefiniować pola przy użyciu podczas inicjalizacji przed jego konstruowaniem. Będzie to błąd czasu wykonywania. Więc zmieniasz kolejność definicji. Bądź ostrożny i uważaj!
źródło
kolejność jest ważna, ponieważ jeśli a jest inicjowane przed b, a a zależy od b. pojawi się niezdefiniowane zachowanie.
źródło