Potrzebuję użyć wyliczenia o określonym zakresie, aby można było przekazać je jako określone typy do naszego serializera. Podałem wyraźne liczby całkowite dla członków wyliczenia Enum1
.Ostrzeżenie o przekroczeniu wartości gcc "zbyt małe, aby pomieścić wszystkie wartości"
Włożyłem dwa scoped stałe teksty pasujące do opisu powyżej w bitfield zatem
enum class Enum1 {
value1 = 0x0,
value2 = 0x1,
value3 = 0x2
};
enum class Enum2 {
value1 = 0x0,
value2,
value3,
// ...
value14
};
struct Example {
Enum1 value1 : 2;
Enum2 value2 : 6;
}
Teraz gdziekolwiek używam rodzaj Example
, pojawia się ostrzeżenie „«Przykład :: wartosc1»jest zbyt mały, aby pomieścić wszystkich wartości "Enum1" "i podobnie dla Enum2
. Zauważ, że tak nie jest w przypadku wartości, które zdefiniowaliśmy, i nie jesteśmy zainteresowani w ogóle z wartościami spoza nich.
To dość poważna rozproszenie w naszym procesie kompilacji - projekt jest duży i złożony i nie chcemy skanować wielu z tych ostrzeżeń (i jest ich wiele).
Szukałem flagi GCC (G ++), aby wyłączyć określone ostrzeżenie. Czy jest taki, który mogę przekazać w linii poleceń? Idealnie, chciałbym użyć ostrzeżenia pragma, aby wyłączyć go lokalnie, jeśli to możliwe.
Istnieje niewiele możliwości zmiany struktury kodu w tym momencie, ale możemy naprawdę użyć tych fałszywych ostrzeżeń usuniętych.
Z góry dziękuję.
Edycja: Dodano nagłówek o zmienionej nazwie z zmienionymi identyfikatorami.
jeśli Enum1 zawiera wartości większe niż 3, to nie zmieści się na 2 bitach – nikniknik2016
Czy możesz pokazać definicję 'Enum1' i' Enum2'? – Angew
@ nikniknik2016: To nie jest – jsren