Expresiones de valor L y valor R

Las expresiones que hacen referencia a 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 "izquierdo", lo que implica que puede aparecer a la izquierda del signo igual ( = ). Los valores L suelen ser identificadores.

Las expresiones que hacen referencia a ubicaciones modificables se denominan "valores L modificables". Un valor L modificable no puede tener un tipo de matriz, un tipo incompleto o un tipo con el atributo const. Para que las estructuras y las uniones sean valores L modificables, no deben tener ningún miembro con el atributo 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 su tipo es aritmético, de estructura, de unión o de puntero. Por ejemplo, si ptr es un puntero a una región de almacenamiento, entonces *ptr es un valor L modificable que designa la región de almacenamiento a la que señala ptr.

Cualquiera de las siguientes expresiones de C pueden ser expresiones de valor L:

  • Un identificador de tipo entero, flotante, puntero, estructura o unión

  • Una expresión de subíndice ([ ]) que no se evalúe como una matriz

  • Una expresión de selección de miembro (-> o .)

  • Una expresión de direccionamiento indirecto unario (*) que no hace referencia a una matriz

  • Una expresión de valor L entre paréntesis

  • Un objeto const (un valor L no modificable)

El término “valor R” se utiliza a veces para describir el valor de una expresión y distinguirlo de un valor L. Todos los valores L son valores R, pero no todos los valores R son valores L.

Específicos de Microsoft

Microsoft C incluye una extensión del estándar ANSI C que permite que las conversiones de valores L se usen valores L, siempre que el tamaño del objeto no se alargue debido a la conversión. (Para obtener más información, vea Conversiones de conversión de tipos). En 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.

FIN de Específicos de Microsoft

Vea también

Operandos y expresiones