Qualificatori di tipoType Qualifiers

I qualificatori di tipo forniscono una delle due proprietà a un identificatore.Type qualifiers give one of two properties to an identifier. Il qualificatore di tipo const dichiara un oggetto come non modificabile.The const type qualifier declares an object to be nonmodifiable. Il qualificatore di tipo volatile dichiara un elemento il cui valore può essere modificato legittimamente da un elemento sotto il controllo del programma in cui è visualizzato, ad esempio un thread contemporaneamente in esecuzione.The volatile type qualifier declares an item whose value can legitimately be changed by something beyond the control of the program in which it appears, such as a concurrently executing thread.

I due qualificatori di tipo, const e volatile, possono apparire solo una volta in una dichiarazione.The two type qualifiers, const and volatile, can appear only once in a declaration. I qualificatori di tipo possono essere visualizzati con qualsiasi identificatore di tipo; tuttavia, non possono apparire dopo la prima virgola in una dichiarazione multipla dell'elemento.Type qualifiers can appear with any type specifier; however, they cannot appear after the first comma in a multiple item declaration. Ad esempio le seguenti dichiarazioni sono valide:For example, the following declarations are legal:

typedef volatile int VI;  
const int ci;  

Queste dichiarazioni non sono valide:These declarations are not legal:

typedef int *i, volatile *vi;  
float f, const cf;     

I qualificatori di tipo sono rilevanti solo in caso di accesso agli identificatori come l-value nelle espressioni.Type qualifiers are relevant only when accessing identifiers as l-values in expressions. Per informazioni su l-value ed espressioni, vedere Espressioni L-Value e R-Value.See L-Value and R-Value Expressions for information about l-values and expressions.

SintassiSyntax

type-qualifier:type-qualifier:
constvolatileconstvolatile

Le seguenti dichiarazioni const e volatile sono valide:The following are legal const and volatile declarations:

int const *p_ci;       /* Pointer to constant int */  
int const (*p_ci);     /* Pointer to constant int */  
int *const cp_i;       /* Constant pointer to int */  
int (*const cp_i);     /* Constant pointer to int */  
int volatile vint;     /* Volatile integer        */  

Se la specifica di un tipo matrice include i qualificatori di tipo, viene qualificato l'elemento, non il tipo di matrice.If the specification of an array type includes type qualifiers, the element is qualified, not the array type. Se la specifica del tipo di funzione include i qualificatori, il comportamento non è definito.If the specification of the function type includes qualifiers, the behavior is undefined. volatileconst influisce sull'intervallo di valori o proprietà aritmetiche dell'oggetto.Neither volatile nor const affects the range of values or arithmetic properties of the object.

Questo elenco descrive come usare const e volatile.This list describes how to use const and volatile.

  • La parola chiave const può essere usata per modificare un tipo fondamentale o aggregato, un puntatore a un oggetto di qualsiasi tipo o un elemento typedef.The const keyword can be used to modify any fundamental or aggregate type, or a pointer to an object of any type, or a typedef. Se un elemento viene dichiarato con il solo qualificatore di tipo const, si presuppone che il tipo sia const int. Una variabile const può essere inizializzata o può essere inserita in un'area di archiviazione di sola lettura.If an item is declared with only the const type qualifier, its type is taken to be const int. A const variable can be initialized or can be placed in a read-only region of storage. La parola chiave const è utile per la dichiarazione di puntatori a const, poiché richiede che la funzione non modifichi il puntatore in alcun modo.The const keyword is useful for declaring pointers to const since this requires the function not to change the pointer in any way.

  • Il compilatore presuppone che, in un punto qualsiasi del programma, a una variabile volatile possa accedere un processo sconosciuto che utilizza o modifica il valore.The compiler assumes that, at any point in the program, a volatile variable can be accessed by an unknown process that uses or modifies its value. Di conseguenza, indipendentemente dalle ottimizzazioni specificate nella riga di comando, il codice per ogni assegnazione o riferimento di una variabile volatile deve essere generato anche se sembra non produrre alcun effetto.Therefore, regardless of the optimizations specified on the command line, the code for each assignment to or reference of a volatile variable must be generated even if it appears to have no effect.

    Se volatile viene utilizzato da solo, viene utilizzato int.If volatile is used alone, int is assumed. L'identificatore di tipo volatile può essere utilizzato per fornire accesso affidabile a posizioni di memoria speciali.The volatile type specifier can be used to provide reliable access to special memory locations. Utilizzare volatile con oggetti dati a cui è possibile accedere o che possono essere modificati dai gestori del segnale, mediante l'esecuzione contemporanea di programmi o mediante hardware speciale come i registri di I/O mappati alla memoria.Use volatile with data objects that may be accessed or altered by signal handlers, by concurrently executing programs, or by special hardware such as memory-mapped I/O control registers. È possibile dichiarare una variabile come volatile per la sua durata oppure eseguire il cast di un solo riferimento che sia volatile.You can declare a variable as volatile for its lifetime, or you can cast a single reference to be volatile.

  • Un elemento può essere sia const che volatile. In questo caso l'elemento non può essere modificato legittimamente dal programma in cui si trova, ma può essere modificato da un processo asincrono.An item can be both const and volatile, in which case the item could not be legitimately modified by its own program, but could be modified by some asynchronous process.

Vedere ancheSee Also

Dichiarazioni e tipiDeclarations and Types