Expresiones de L- Valor y de R- Valor
Las expresiones que hacen referencia a las ubicaciones de memoria se denominan expresiones de “valor l”.Un valor l representa un valor de “localizador” de la región de almacenamiento, o un valor “izquierda”, lo que puede aparecer a la izquierda del signo igual (=).valores l suelen ser identificadores.
Las expresiones que hacen referencia a ubicaciones modificables se denominan “l modificables.” Un valor l modificable no puede tener un tipo de matriz, un tipo incompleto, o un tipo con el atributo de const .Para que las estructuras y uniones son l modificables, no deben tener ninguna miembros con el atributo de const .El nombre del identificador indica una ubicación de almacenamiento, mientras que el valor de la variable es el valor almacenado en esa ubicación.
Un identificador es un valor l modificable si hace referencia a una ubicación de memoria y si el tipo es aritmético, estructura, unión, o puntero.Por ejemplo, si ptr es un puntero a una región de almacenamiento, después *ptr es un valor l modificable que señala la región de almacenamiento a la que ptr señala.
Las expresiones de cualquiera de las siguientes de C pueden ser expresiones de valor l:
Un identificador entero, la flotante, de puntero, de estructura, o del tipo de unión
Una expresión subscribe (de []) que no se evalúa como una matriz
Una expresión miembro-selección (– > o .)
Una expresión de singular-engaño (*) que no hace referencia a una matriz
Una expresión de valor l entre paréntesis
Un objeto de const (un valor l no modificable)
El término “r-value” se utiliza a veces para describir el valor de una expresión y distinguirlo de un valor l.Todos los l son r-valores pero no todos los r-valores son l.
Específicos de Microsoft
Microsoft c incluye una extensión del estándar ANSI C que permite que las conversiones de l se utilizarán como l, mientras el tamaño del objeto no se alargue a través de la conversión.(Vea Conversiones de la conversión de tipos para obtener más información.) El ejemplo siguiente se muestra esta característica:
char *p ;
short i;
long l;
(long *) p = &l ; /* Legal cast */
(long) i = l ; /* Illegal cast */
El valor predeterminado para Microsoft c es que las extensiones de Microsoft están habilitadas.Utilice la opción de compilador /Za para deshabilitar estas extensiones.
Específico de Microsoft de FINAL