Valor de l e expressões R-Value
Expressões que se referem a locais da memória são chamadas de expressões de "valor de l".Um l-value representa o valor de "localizador" de uma região armazenamento ou um valor de "esquerdo", indicando que ele pode aparecer à esquerda do sinal de igual (=).L-valores geralmente são identificadores.
Referindo-se aos locais podem ser modificadas as expressões são chamadas de "modificáveis l-valores". Um valor l pode ser modificado não pode ter um tipo de matriz, um tipo incompleto ou um tipo com o const atributo.Para estruturas e uniões ser modificáveis l-valores, eles não devem ter todos os membros com o const atributo.O nome do identificador denota um local de armazenamento, enquanto o valor da variável é o valor armazenado nesse local.
Um identificador é um valor l pode ser modificado se ele se refere a um local da memória e se o seu tipo é aritmética, estrutura, união ou ponteiro.Por exemplo, se ptr é um ponteiro para uma região de armazenamento, em seguida, *ptr é um l-valor modificável que designa a região de armazenamento que ptr pontos.
Qualquer uma das expressões de c a seguir pode ser expressões l-value:
Um identificador de integral, flutuante, ponteiro, estrutura ou tipo de união
Um subscrito ([]) expressão que não avalia a uma matriz
Uma expressão de seleção de membro (– > ou .)
Um unário-indireção (*) expressão que não se refere a uma matriz
Uma expressão de valor de l entre parênteses
A const o objeto (um nonmodifiable l-value)
O termo "r-value" às vezes é usado para descrever o valor de uma expressão e para distingui-lo de um valor de l.L todos os valores são valores r, mas nem todos os valores r são valores de l.
Específicos do Microsoft
Microsoft c inclui uma extensão do padrão ANSI C que permite conversões de valores para serem usados como valores l, l, desde que o tamanho do objeto não é aumentado por meio do elenco.(Consulte Conversões de conversão de tipo para obter mais informações.) O exemplo a seguir ilustra esse recurso:
char *p ;
short i;
long l;
(long *) p = &l ; /* Legal cast */
(long) i = l ; /* Illegal cast */
O padrão Microsoft C é que as extensões do Microsoft estão habilitadas.Use a opção de compilador /Za para desativar essas extensões.
Específicos do Microsoft final