C prohlášení výčtu
Výčet obsahuje sadu konstant pojmenované celé číslo.Typ deklarace výčtu poskytuje název výčtu (volitelně) značky a definuje sadu identifikátorů pojmenované celé číslo (nazývá "výčet sada," "konstanty výčtu," "výčtu" nebo "členové").Proměnná s typ výčtu ukládá jedna z hodnot výčtu sadu podle typu.
Proměnné enum typ lze použít ve výrazech indexování a jako operandy všechny aritmetická a relační operátory.Vyčíslení alternativu k #define direktivu preprocesoru přináší výhody, že hodnoty mohou být generovány automaticky a řídila běžných pravidel oboru.
V ANSI C výrazy, které definují hodnotu konstanty výčtu vždy mít int zadejte; úložiště přidruženého proměnné výčtu tedy úložiště pro jeden int hodnotu.Výčet konstantu nebo hodnoty výčtového typu lze použít kdekoli umožňuje jazyka c výraz celé číslo.
Syntaxe
Specifikátor výčtu:
enum identifier opt**{** enumerator-list }výčet identifikátor
Nepovinný identifikátor typ výčtu definované názvy seznamu čítače výčtu.Tento identifikátor se často nazývá "značka" výčet určeným v seznamu.Specifikátor typu formuláře
enum identifier { enumerator-list }
deklaruje identifikátor být značka výčtu určený seznamu čítače výčtu nonterminal.Seznamu čítače výčtu definuje "obsah enumerator." Seznamu čítače výčtu je podrobně níže.
Prohlášení o značku je viditelné, následné prohlášení, které používají tag, ale vynecháte-li seznamu čítače výčtu určit dříve deklarovaný typ výčtu.Značka musí odkazovat na typ definovaný výčet a výčtu typu musí být v aktuálním oboru.Protože je jinde, definován typ výčtu seznamu čítače výčtu nezobrazí v tomto prohlášení.Prohlášení typy odvozené z výčtů a typedef prohlášení pro výčet typů lze použít značku výčtu, než je definován typ výčtu.
Syntaxe
Čítač výčtu seznam:
Čítač výčtuČítač výčtu seznam**,**enumerator
enumerator:
konstanty výčtukonstanty výčtu = konstantní výraz
konstanty výčtu:
identifikátor
Každý konstanty výčtu v výčet seznamu hodnotu výčtu sadu názvů.Standardně první konstanty výčtu je spojen s hodnotou 0.Další konstanty výčtu v seznamu je spojen s hodnotou ( konstantní výraz + 1), pokud není výslovně spojit s jinou hodnotu.Název konstanty výčtu je jeho hodnota.
Můžete použít konstanty výčtu = konstantní výraz potlačit výchozí pořadí hodnot.Proto pokud konstanty výčtu = konstantní výraz se zobrazí v seznamu čítače výčtu, konstanty výčtu je spojen s hodnota podle konstantní výraz.Konstantní výraz musí mít int zadejte a může být záporná.
Členy sady výčet platí následující pravidla:
Do výčtu sada může obsahovat duplicitní hodnoty konstantní.Nelze například přiřadit hodnotu 0 s dvěma různými identifikátory, případně s názvem null a zero, v jedné sadě.
Identifikátory v seznamu výčtu musí být odlišný od jiných identifikátorů ve stejném oboru s stejné viditelnost, včetně běžných názvů proměnných a identifikátory v jiných seznamech výčtu.
Výčet značek dodržovat běžných pravidel oboru.Musí být oddělen od ostatních výčtu, strukturu a unie tagy s stejné viditelnost.
Příklady
Tyto příklady ilustrují deklarace výčtu:
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;
Hodnota 0 je spojeno s saturday ve výchozím nastavení.Identifikátor sunday explicitně nastavena na 0.Zbývající identifikátory jsou standardně uvedeny hodnoty 1 až 5.
V tomto příkladu hodnota ze sady DAY je přiřazen proměnné today.
enum DAY today = wednesday;
Všimněte si, že název konstanty výčtu slouží k přiřazení hodnoty.Protože DAY typ výčtu byla dříve deklarována, pouze výčet značka DAY je nezbytné.
Proměnné typu Výčtový datový přiřadit explicitně celočíselnou hodnotu, použijte typ cast:
workday = ( enum DAY ) ( day_value - 1 );
Tato cast je doporučeno v C, ale není požadován.
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 */
Toto prohlášení může být také určen jako
enum BOOLEAN { false, true } end_flag, match_flag;\
nebo jako
enum BOOLEAN { false, true } end_flag;
enum BOOLEAN match_flag;
Příklad, který používá tyto proměnné může vypadat například takto:
if ( match_flag == false )
{
.
. /* statement */
.
}
end_flag = true;
Čítač výčtu nepojmenované datové typy rovněž prohlášen.Je vynechán název typu dat, ale lze deklarovat proměnné.Proměnná response je proměnná typu definovaného:
enum { yes, no } response;