C deklaracji wyliczenia
Wyliczenie zawiera zestaw nazwany całkowitą stałych.Deklaracja typu wyliczenie podaje nazwę tagu wyliczenie (opcjonalnie) i definiuje zestaw identyfikatorów nazwanych całkowitą (o nazwie "wyliczenia ustawiony," "moduł wyliczający stałe", "moduły wyliczające" lub "Członkowie").Zmienna typu wyliczenie przechowuje jedną z wartości zestawu wyliczenie zdefiniowane przez tego typu.
Zmienne enum typ może być używany w wyrażeniach indeksowania i jako operandy wszystkie operatory arytmetyczne i relacyjne.Wyliczenia jako alternatywa do #define dyrektywy preprocesora z korzyściami, że wartości mogą być generowane dla Ciebie i przestrzegać normalnych regułami zakresu.
W ANSI C wyrażenia określające wartość stałej modułu wyliczającego zawsze mają int typu; w ten sposób, składowania, skojarzonego ze zmienną wyliczenie jest magazyn, wymagane dla pojedynczego int wartości.Można użyć stałej wyliczeniowej lub wartości wyliczeniowe dowolnym języku c zezwala na wyrażenie liczby całkowitej.
Składnia
Specyfikator Enum:
enum identifier opt**{** enumerator-list }Enum identyfikator
Opcjonalny identyfikatora nazwy typ wyliczeniowy zdefiniowane przez listy modułu wyliczającego.Ten identyfikator jest często nazywana "tag" wyliczenie, określony przez listę.Specyfikator typu formularza
enum identifier { enumerator-list }
oświadcza, identyfikatora być tag wyliczenia określony przez listy modułu wyliczającego symboli nieterminalnych.Listy modułu wyliczającego definiuje "zawartość modułu wyliczającego." Listy modułu wyliczającego jest opisana szczegółowo poniżej.
Jeśli deklaracja znacznik jest widoczne, późniejsze deklaracje, które używany jest tag, ale pominąć listy modułu wyliczającego określić poprzednio zadeklarowanych Typ wyliczany.Znacznik musi odwoływać się do typu zdefiniowanego wyliczenie i ten typ wyliczeniowy musi być w bieżącym zakresie.Ponieważ typ wyliczeniowy jest zdefiniowany w innym miejscu, listy modułu wyliczającego nie są wyświetlane w tej deklaracji.Deklaracje typów pochodnych wyliczeń i typedef deklaracje typów wyliczenie można zastosować tag wyliczenie, zanim jest zdefiniowany typ wyliczeniowy.
Składnia
Moduł wyliczający listy:
Moduł wyliczającyModuł wyliczający listy**,**enumerator
enumerator:
stałej wyliczeniowejstałej wyliczeniowej = wyrażenie stała
stałej wyliczeniowej:
Identyfikator
Każdy stałej wyliczeniowej w wyliczenia listy nazwy wartości wyliczenia zestawu.Domyślnie pierwszy stałej wyliczeniowej jest skojarzony z wartością 0.Następnego stałej wyliczeniowej na liście jest skojarzony z wartością ( wyrażenie stała + 1), chyba że wyraźnie skojarzyć go z inną wartość.Nazwa stałej wyliczeniowej jest równoważne z jego wartość.
Można użyć stałej wyliczeniowej = wyrażenie stała Aby zastąpić domyślną sekwencją wartości.W ten sposób Jeśli stałej wyliczeniowej = wyrażenie stała pojawia się w listy modułu wyliczającego, stałej wyliczeniowej jest skojarzony z wartości podanej przez wyrażenie stała.Wyrażenie stała musi mieć int typu i może być ujemna.
Następujące zasady stosuje się do członków zestawu wyliczenie:
Wyliczanie mogą zawierać zduplikowane wartości stałej.Na przykład można skojarzyć wartość 0 z dwóch różnych identyfikatorów, prawdopodobnie o nazwie null i zero, w tym samym zestawie.
Identyfikatorów na liście wyliczenia musi być różny od innych identyfikatorów, w tym samym zakresie z tej samej widoczności, włączając zwykłej nazwy zmiennych i identyfikatory w innych listach wyliczania.
Wyliczanie znaczników przestrzegać normalnych regułami zakresu.Muszą one być odmienne od innych wyliczenie, struktury i znaczników Unii z tej samej widoczności.
Przykłady
Te przykłady ilustrują wyliczenie deklaracji:
enum DAY /* Defines an enumeration type */
{
saturday, /* Names day and declares a */
sunday = 0, /* variable named workday with */
monday, /* that type */
tuesday,
wednesday, /* wednesday is associated with 3 */
thursday,
friday
} workday;
Wartość 0 jest skojarzony z saturday domyślnie.Identyfikator sunday jest jawnie ustawiona na 0.Pozostałe identyfikatory podane są wartości od 1 do 5, domyślnie.
W tym przykładzie wartość z zestawu DAY jest przypisana do zmiennej today.
enum DAY today = wednesday;
Należy zauważyć, że używana jest nazwa stałej wyliczeniowej w celu przypisania wartości.Ponieważ DAY typ wyliczeniowy wcześniej został uznany, tylko tag wyliczania DAY jest to konieczne.
Aby jawnie przypisać wartość całkowitą zmiennej wyliczany typ danych, użyj rzutowania typu:
workday = ( enum DAY ) ( day_value - 1 );
To cast jest zalecane w C, ale nie jest wymagane.
enum BOOLEAN /* Declares an enumeration data type called BOOLEAN */
{
false, /* false = 0, true = 1 */
true
};
enum BOOLEAN end_flag, match_flag; /* Two variables of type BOOLEAN */
Deklaracja ta może być również określona jako
enum BOOLEAN { false, true } end_flag, match_flag;\
lub jako
enum BOOLEAN { false, true } end_flag;
enum BOOLEAN match_flag;
Przykładem, który używa tych zmiennych może wyglądać następująco:
if ( match_flag == false )
{
.
. /* statement */
.
}
end_flag = true;
Moduł wyliczający nienazwane typy danych również może być zadeklarowana.Nazwa typu danych zostanie pominięty, ale może być deklarowana zmiennych.Zmienna response jest zmienna typu zdefiniowane:
enum { yes, no } response;