Dichiarazioni di enumerazioni CC Enumeration Declarations

Un'enumerazione è un set di costanti di tipo Integer denominate.An enumeration consists of a set of named integer constants. Una dichiarazione del tipo di enumerazione fornisce il nome del tag (facoltativo) di enumerazione e definisce il set di identificatori Integer denominati (denominati "set di enumerazione", "costanti di enumeratore", "enumeratori" o "membri").An enumeration type declaration gives the name of the (optional) enumeration tag and defines the set of named integer identifiers (called the "enumeration set," "enumerator constants," "enumerators," or "members"). Una variabile con tipo di enumerazione archivia uno dei valori del set di enumerazione definiti da quel tipo.A variable with enumeration type stores one of the values of the enumeration set defined by that type.

Le variabili di tipo enum possono essere utilizzate nelle espressioni di indicizzazione e come operandi di tutti gli operatori aritmetici e relazionali.Variables of enum type can be used in indexing expressions and as operands of all arithmetic and relational operators. Le enumerazioni forniscono un'alternativa alla direttiva per il preprocessore #define con il vantaggio che i valori possono essere generati automaticamente e sono conformi alle normali regole di ambito.Enumerations provide an alternative to the #define preprocessor directive with the advantages that the values can be generated for you and obey normal scoping rules.

In ANSI C, le espressioni che definiscono il valore di una costante di enumeratore presentano sempre il tipo int; pertanto, lo spazio di archiviazione associato a una variabile di enumerazione è quello necessario per un singolo valore int.In ANSI C, the expressions that define the value of an enumerator constant always have int type; thus, the storage associated with an enumeration variable is the storage required for a single int value. Una costante di enumerazione o un valore di tipo enumerato può essere utilizzato ovunque il linguaggio C consenta un'espressione Integer.An enumeration constant or a value of enumerated type can be used anywhere the C language permits an integer expression.

SintassiSyntax

enum-specifier:enum-specifier:
enum identifier opt{ enumerator-list }enum identifier opt{ enumerator-list }

enum identifierenum identifier

L'elemento identifier facoltativo assegna un nome al tipo di enumerazione definito da enumerator-list.The optional identifier names the enumeration type defined by enumerator-list. Questo identificatore è spesso definito il "tag" dell'enumerazione specificata dall'elenco.This identifier is often called the "tag" of the enumeration specified by the list. Un identificatore di tipo del formatoA type specifier of the form


enum  
identifier  
{  
enumerator-list  
}  

dichiara che identifier è il tag dell'enumerazione specificata da enumerator-list non terminale.declares identifier to be the tag of the enumeration specified by the enumerator-list nonterminal. L'elemento enumerator-list definisce il "contenuto dell'enumeratore".The enumerator-list defines the "enumerator content." I dettagli di enumerator-list sono riportati di seguito.The enumerator-list is described in detail below.

Se la dichiarazione di un tag è visibile, le dichiarazioni successive che usano il tag ma omettono enumerator-list specificano il tipo enumerato dichiarato in precedenza.If the declaration of a tag is visible, subsequent declarations that use the tag but omit enumerator-list specify the previously declared enumerated type. Il tag deve fare riferimento a un tipo di enumerazione definito e tale tipo di enumerazione deve trovarsi nell'ambito corrente.The tag must refer to a defined enumeration type, and that enumeration type must be in current scope. Poiché il tipo di enumerazione viene definito altrove, enumerator-list non viene visualizzato nella dichiarazione.Since the enumeration type is defined elsewhere, the enumerator-list does not appear in this declaration. Le dichiarazioni dei tipi derivati da enumerazioni e da dichiarazioni typedef per i tipi di enumerazione possono utilizzare il tag di enumerazione prima che sia definito il tipo di enumerazione.Declarations of types derived from enumerations and typedef declarations for enumeration types can use the enumeration tag before the enumeration type is defined.

SintassiSyntax

enumerator-list:enumerator-list:
enumeratorenumerator

enumerator-list , enumeratorenumerator-list , enumerator

enumerator:enumerator:
enumeration-constantenumeration-constant

enumeration-constant = constant-expressionenumeration-constant = constant-expression

enumeration-constant:enumeration-constant:
identifieridentifier

Ogni elemento enumeration-constant in un elenco enumeration-list assegna un nome a un valore del set di enumerazione.Each enumeration-constant in an enumeration-list names a value of the enumeration set. Per impostazione predefinita, il primo elemento enumeration-constant viene associato al valore 0.By default, the first enumeration-constant is associated with the value 0. Il successivo elemento enumeration-constant nell'elenco viene associato al valore di (constant-expression + 1), a meno che non lo si associ in modo esplicito a un altro valore.The next enumeration-constant in the list is associated with the value of ( constant-expression + 1 ), unless you explicitly associate it with another value. Il nome di un elemento enumeration-constant è equivalente al relativo valore.The name of an enumeration-constant is equivalent to its value.

È possibile usare enumeration-constant = constant-expression per eseguire l'override della sequenza di valori predefinita.You can use enumeration-constant = constant-expression to override the default sequence of values. Pertanto se enumeration-constant = constant-expression appare in enumerator-list, enumeration-constant è associato al valore specificato da constant-expression.Thus, if enumeration-constant = constant-expression appears in the enumerator-list, the enumeration-constant is associated with the value given by constant-expression. constant-expression deve essere di tipo int e può essere negativo.The constant-expression must have int type and can be negative.

Le regole seguenti vengono applicate ai membri di un set di enumerazione:The following rules apply to the members of an enumeration set:

  • Un set di enumerazione può contenere valori costanti duplicati.An enumeration set can contain duplicate constant values. Ad esempio, è possibile associare il valore 0 a due identificatori diversi, talvolta denominato null e zero, nello stesso set.For example, you could associate the value 0 with two different identifiers, perhaps named null and zero, in the same set.

  • Gli identificatori nell'elenco di enumerazione devono essere diversi dagli altri identificatori nello stesso ambito con la stessa visibilità, inclusi i nomi di variabili comuni e gli identificatori in altri elenchi di enumerazione.The identifiers in the enumeration list must be distinct from other identifiers in the same scope with the same visibility, including ordinary variable names and identifiers in other enumeration lists.

  • I tag di enumerazione sono conformi alle normali regole di ambito.Enumeration tags obey the normal scoping rules. Devono essere differenti da altri tag di enumerazione, struttura e unione con la stessa visibilità.They must be distinct from other enumeration, structure, and union tags with the same visibility.

EsempiExamples

In questi esempi vengono illustrate le dichiarazioni di enumerazione:These examples illustrate enumeration declarations:

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;  

Il valore 0 è associato a saturday per impostazione predefinita.The value 0 is associated with saturday by default. L'identificatore sunday è impostato in modo esplicito su 0.The identifier sunday is explicitly set to 0. Agli identificatori restanti vengono forniti i valori da 1 a 5 per impostazione predefinita.The remaining identifiers are given the values 1 through 5 by default.

In questo esempio, un valore del set DAY viene assegnato alla variabile today.In this example, a value from the set DAY is assigned to the variable today.

enum DAY today = wednesday;  

Si noti che il nome della costante di enumerazione viene utilizzato per assegnare il valore.Note that the name of the enumeration constant is used to assign the value. Poiché il tipo di enumerazione DAY era dichiarato in precedenza, è necessario solo il tag DAY di enumerazione.Since the DAY enumeration type was previously declared, only the enumeration tag DAY is necessary.

Per assegnare in modo esplicito un Integer a una variabile di un tipo di dati enumerato, utilizzare un cast di tipo:To explicitly assign an integer value to a variable of an enumerated data type, use a type cast:

workday = ( enum DAY ) ( day_value - 1 );  

Questo cast è consigliato nel linguaggio C ma non è obbligatorio.This cast is recommended in C but is not required.

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 */  

Questa dichiarazione può essere specificata comeThis declaration can also be specified as

enum BOOLEAN { false, true } end_flag, match_flag;\  

o comeor as

enum BOOLEAN { false, true } end_flag;  
enum BOOLEAN match_flag;  

Un esempio che utilizza queste variabili potrebbe essere simile al seguente:An example that uses these variables might look like this:

if ( match_flag == false )  
    {  
     .  
     .   /* statement */   
     .  
    }  
    end_flag = true;  

I tipi di dati senza nome dell'enumeratore possono anche essere dichiarati.Unnamed enumerator data types can also be declared. Il nome del tipo di dati viene omesso, ma le variabili possono essere dichiarate.The name of the data type is omitted, but variables can be declared. La variabile response è una variabile del tipo definito:The variable response is a variable of the type defined:

enum { yes, no } response;  

Vedere ancheSee Also

EnumerazioniEnumerations