Kvalifikátory typu
Kvalifikátory typu předávají identifikátoru jednu nebo dvě vlastnosti.Kvalifikátor typu const deklaruje nemožnost modifikace objektu.Kvalifikátor typu volatile deklaruje položku, jejíž hodnotu lze oprávněně změnit něčím mimo dosah programu, ve kterém se nalézá, jako například souběžně vykonávajícím vláknem.
Kvalifikátory typu const a volatile se mohou v deklaraci objevit pouze jednou.Kvalifikátory typu se mohou objevit v jakémkoli specifikátoru. Nemohou se však objevit za první čárkou v deklaraci více položek.Platné jsou například následující deklarace:
typedef volatile int VI;
const int ci;
Mezi neplatné deklarace patří:
typedef int *i, volatile *vi;
float f, const cf;
Kvalifikátory typu jsou relevantní pouze v případě, že je k identifikátorům přistupováno jako k výrazům hodnot l.Informace o výrazech a hodnotách l lze nalézt v tématu Výrazy hodnot L a R.
Syntax
- kvalifikátor typu:
constvolatile
Následující deklarace const a volatile jsou platné:
int const *p_ci; /* Pointer to constant int */
int const (*p_ci); /* Pointer to constant int */
int *const cp_i; /* Constant pointer to int */
int (*const cp_i); /* Constant pointer to int */
int volatile vint; /* Volatile integer */
Zahrnuje-li deklarace typu pole kvalifikátory, je kvalifikován prvek, nikoli typ pole.Zahrnuje-li kvalifikátory specifikace typu funkce, není chování definováno.Rozsah hodnot nebo aritmetické vlastnosti objektu nejsou ovlivněny ani volatile, ani const.
Tento seznam popisuje, jak používat const a volatile.
Klíčové slovo const lze použít pro úpravu libovolného základního nebo agregačního typu nebo ukazatele na objekt jakéhokoli typu, nebo na typedef.Jestliže je položka deklarována pouze pomocí kvalifikátoru typu const, je její typ brán jako const int.Proměnná const může být inicializována nebo umístěna do oblasti uložiště určeného jen pro čtení.Klíčové slovo const je užitečné pro deklarování ukazatele na const, protože funkce nesmí ukazatel nijak měnit.
Kompilátor předpokládá, že lze v rámci programu k proměnné volatile kdykoli přistupovat skrze neznámý proces, který používá nebo mění její hodnotu.A proto, bez ohledu na optimalizace zadané pomocí příkazového řádku, musí být kód každého přiřazení nebo odkazu na proměnnou volatile vygenerován, i v případě, kdy bude možné, že nebude mít vliv.
Pokud je volatile použito samostatně, předpokládá se int.Specifikátor typu volatile lze použít pro poskytnutí spolehlivého přístupu ke speciálním umístěním v paměti.U datových objektů, ke kterým může být přistupováno nebo mohou být měněny obslužnými rutinami signálů, souběžně s právě vykonávajícími programy nebo speciálním hardwarem, jako jsou registry I/O ovládacích prvků namapovaných na paměť, lze použít volatile.Je možné deklarovat proměnnou jako volatile po celou dobu její životnosti nebo lze provést přetypování odkazu na volatile.
Položka může být const i volatile a v takovém případě nelze položku legálně změnit svým vlastním programem, ale je možné ji upravit asynchronním procesem.