Doba platnosti
"Životnost" je doba provádění při vykonávání programu, ve které existuje proměnná nebo funkce.Doba trvání úložiště identifikátoru určuje jeho životnost.
Identifikátor deklarovaný pomocí specifikátoru paměťových třídstatic má statickou dobu trvání úložiště.Identifikátory se statickou dobou skladování (nazývané také "globální") mají po dobu vykonávání programu úložiště a definovanou hodnotu.Úložiště je vyhrazeno a uložená hodnota identifikátoru je inicializována pouze jednou, před spuštěním programu.Identifikátor deklarovaný pomocí externího nebo interního propojení má také statickou dobu úložiště (viz téma Propojení).
Identifikátor deklarovaný bez specifikátoru paměťových tříd static má statickou dobu trvání úložiště, je-li deklarován uvnitř funkce.Identifikátor s automatickou dobu trvání úložiště ("místní identifikátor") má úložiště a definovanou hodnotou pouze v rámci bloku, kde je identifikátor definován nebo deklarován.Automatickému identifikátoru je přiděleno nové úložiště pokaždé, když program přejde do tohoto bloku a ztratí své úložiště (a jeho hodnotu) při opuštění bloku programem.Identifikátory, které jsou deklarovány ve funkci bez propojení mají také statickou dobu trvání úložiště.
Následující pravidla určují, zda má identifikátor globální (statickou) nebo místní (automatickou) životnost:
Všechny funkce mají statickou životnost.A proto existují po celou dobu při provádění programu.Identifikátory deklarované na vnější úrovni (tedy mimo všechny bloky v programu na stejné úrovni definic funkcí) mají vždy globální (statickou) životnost.
Má-li místní proměnná inicializátor, je proměnná inicializována pokaždé, když je vytvořena (pokud není ovšem deklarována jako static).Parametry funkce mají také místní životnost.U identifikátoru v rámci bloku je možné zadat globální životnost zahrnutím specifikátoru paměťových tříd static do jeho deklarace.Jakmile je deklarován, jako static, proměnná zachová svou hodnotu z jedné položky bloku na další.
Přestože identifikátor s globální životností existuje během spuštění zdrojového programu (například externě deklarovaná proměnná nebo místní proměnná deklarovaná pomocí klíčového slova static), nemusí být viditelný ve všech částech programu.Více informací o viditelnosti naleznete v tématu Obor a viditelnost a pro diskuzi o neterminálu specifikátoru paměťových tříd navštivte téma Třídy úložiště.
Paměť lze rozdělit podle potřeby (dynamicky), pokud je vytvářeno pomocí speciálních rutin knihovny, jako malloc.Jelikož dynamické přidělování paměti používá rutiny knihoven, není považováno za součást jazyka.Více informací o funkci malloc naleznete v tématu Odkaz knihovny modulu runtime.