Proměnné v jazyce C a C++

05-Proměnné

Charakteristika

V C++ používáme proměnné — tedy pojmenovaná místa v paměti, do kterých ukládáme nějaké hodnoty. Každou proměnnou je třeba deklarovat, tj. oznámit překladači, jak se bude jmenovat a jaké hodnoty do ní budeme ukládat (jakého bude typu).

C: Deklarace na začátku bloku
C++: Deklarace může být kdekoliv

Globální proměnné

Bude dostupná ve všech funkcích v programu za místem své deklarace.

Lokální proměnné

Jejich platnost je omezena na tělo funkce.

Inicializace při deklaraci znamená, že jsme proměnné přidělili počáteční hodnotu.
Alokace paměti je vymezení místa v paměti pro proměnnou. Každé proměnné musí být během své existence přidělen paměťový prostor, který je dán datovým typem. Jméno proměnné je vlastně symbolická adresa tohoto prostoru.

Paměťové třídy

Mění chování proměnných

Auto

Nadbytečná třída, pozůstatek dřívějších verzí, pro lokální proměnné. Ukládají se na zásobník. Při každém vstupu má náhodnou hodnotu, proměnná existuje od vstupu do funkce a zaniká výstupem.

Extern

Implicitní PT pro globální proměnné. Je uložena v datové oblasti. Používá se pro oddělený překlad souborů. (2 a více souborů sdílí tuto proměnnou). V jednom souboru nemusí být "extern", ve všech ostatních musí toto klíčové slovo být.

Static

Neexistuje implicitní definice. (nutné vždy uvést) Tato PT je uložena v datové oblasti. Využívají lokální proměnné uvnitř funkcí - ponechají si svou hodnotu mezi jednotlivými voláními funkce.
Existuje od prvního volání funkce až do ukončení programu. Není přístupná z vnějšku funkce.
Globální proměnná funkce mohou být static, pak jsou viditelné jev modulu, kde jsou definovány.
Pokud nechci, aby mi někdo z modulu zasahoval do mé proměnné, tak static (opak extern).

static int a;
static float f,g; //g není static!
void fce()
{static int x = 0;} //pouze při prvním volání, z lokální globální, pamatuje si hodnotu mezi voláními.
x++

Při prvním volání fce() se x vynuluje při každém volání funkce FCE se hodnota q x zvýší o 1 výsledkem programu jsou vypsána čísla 1 až 10.

Register

Proměnná uložena pouze v registru CPU (jen jestli je volný), velmi rychlá, nedá se přesně určit, kde se uloží. Výhradně jako lokální proměnná.