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 posizioni 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, 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 pedice (
[ ]
) che non restituisce una matriceEspressione di selezione dei membri (
->
o.
)Espressione unaria indiretta (
*
) che non fa riferimento a una matriceUn'espressione l-value tra parentesi
Oggetto
const
(valore l 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.
Sezione specifica 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 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.
Fine sezione specifica Microsoft