Výrazy hodnot L-Value a R-Value
Výrazy, které odkazují na umístění v paměti se nazývají výrazy "l hodnota".l hodnota představuje hodnotu oblasti úložiště "lokátoru" nebo "levou" hodnotu, ze které vyplývá, že může být zobrazena nalevo od znaménka rovnosti (=).l hodnoty jsou často identifikátory.
Výrazy odkazující na upravitelná umístění se nazývají "upravitelné l hodnoty". Upravitelná l hodnota nemůže mít typ pole, neúplný typ nebo typ s atributem const.Aby mohly být struktury a sjednocení l hodnotami, nesmí obsahovat žádné členy s atributem const.Název identifikátoru označuje umístění úložiště, zatímco hodnota proměnné je hodnota uložená v tomto umístění.
Identifikátor je upravitelná l hodnota, odkazuje-li na umístění v paměti a je-li její typ aritmetický, struktura, sjednocení nebo ukazatel.Například pokud je ptr ukazatel na úložiště oblasti, pak je *ptr upravitelná l hodnota, která určuje oblast úložiště na které ukazuje ptr.
Jakýkoli z těchto výrazů jazyka C může být výraz l hodnoty:
Identifikátor integrálního typu, typu s plovoucí řádovou čárkou, typu ukazatele, struktury nebo sjednocení
Výraz dolního indexu ([ ]), který není vyhodnocen na pole
Výraz výběru člena (–> nebo .)
Výraz unární dereference (*), který neodkazuje na pole
Výraz l hodnoty v závorkách
Objekt const (neupravitelná l hodnota)
Pojem "r hodnota" se někdy používá k popisu hodnoty výrazu a pro jeho odlišení od l hodnoty.Všechny l hodnoty jsou r hodnoty, ale ne všechny r hodnoty jsou l hodnoty.
Specifické pro Microsoft
Microsoft C zahrnuje rozšíření standardu ANSI C, který umožňuje přetypovat l hodnoty pro použití jako l hodnoty do doby, dokud není velikost objektu zvětšena pomocí přetypování. (Další informace naleznete v tématu Převody přetypování.) Tuto funkci ukazuje následující příklad:
char *p ;
short i;
long l;
(long *) p = &l ; /* Legal cast */
(long) i = l ; /* Illegal cast */
Ve výchozím nastavení pro jazyk Microsoft C jsou rozšíření společnosti Microsoft povoleny.Použijte možnost kompilátoru /Za pro zákaz těchto rozšíření.
Specificka produktu Microsoft END