Espressioni L-Value e R-Value

Le espressioni che fanno riferimento alle posizioni di memoria vengono chiamate "espressioni l-value". Con L-value si intende un valore del "localizzatore" dell'area di archiviazione o un valore "a sinistra", vale a dire che può essere visualizzato a sinistra del segno di uguale (=). Le espressioni L-value sono spesso identificatori.

Le espressioni che fanno riferimento a percorsi modificabili sono denominate "valori l-modificabili". Un l-value modificabile non può avere un tipo di matrice, un tipo incompleto o un tipo con l'attributo const . Affinché le strutture e le unioni siano modificabili l-values, non devono avere membri con l'attributo const . Il nome dell'identificatore indica un percorso di archiviazione, mentre il valore della variabile è il valore archiviato in quella posizione.

Un identificatore è un'espressione l-value modificabile se fa riferimento a una posizione di memoria e se il relativo tipo è aritmetico, struttura, unione o puntatore. Ad esempio, se ptr è un puntatore a un'area di archiviazione, *ptr sarà un'espressione l-value modificabile che definisce l'area di archiviazione a cui punta ptr.

Una qualsiasi delle seguenti espressioni del linguaggio C può essere un'espressione l-value:

  • Un identificatore di tipo integrale, a virgola mobile, puntatore, struttura o tipo di unione

  • Espressione indice ([ ]) che non restituisce una matrice

  • Espressione di selezione dei membri (-> o .)

  • Espressione unaria indiretta (*) che non fa riferimento a una matrice

  • Un'espressione l-value tra parentesi

  • Oggetto const (un l-value non modificabile)

Il termine "r-value" talvolta viene utilizzato per descrivere il valore di un'espressione e per distinguerlo da l-value. Tutti le espressioni l-value sono r-value ma non tutti le espressioni r-value sono I-value.

Specifico di Microsoft

Microsoft C include un'estensione allo standard ANSI C che consente di usare cast di l-values come l-values, purché le dimensioni dell'oggetto non vengano allungate tramite il cast. Per altre informazioni, vedere Conversioni di cast di tipi. L'esempio seguente illustra questa funzionalità:

char *p ;
short  i;
long l;

(long *) p = &l ;       /* Legal cast   */
(long) i = l ;          /* Illegal cast */

Per impostazione predefinita, in Microsoft C le estensioni Microsoft sono abilitate. Utilizzare l'opzione del compilatore /Za per disabilitare queste estensioni.

END Microsoft Specific

Vedi anche

Operandi ed espressioni