Globálne premenné

variable scope

Premenné aj funkcie majú svoj rozsah platnosti, čiže oblasť, v ktorej fungujú a v ktorej nie. V prípade premennej, ktorá je deklarovaná (definovaná) pod premennou, ktorá ju volá pre ňu neexistuje. Viditeľnosť premennej môžeme označiť ako:

Globálna premenná – platí v celom programe. Umiestňuje sa mimo (nad) definíciu funkcie setup(). Môžu ich používať všetky funkcie definované pod nimi. K použitiu globálnych premenných sa vyhnite, pretože vedie k zlým návykom.

Lokálna premenná – je definovaná vo vnútri funkcie. Môže ich teda používať iba táto funkcia. Povedané inak, lokálna premenná platí iba medzi dvoma {}. Viaceré funkcie môžu mať lokálne premenné s tým istým menom, každá používa tú svoju. Ak má lokálna a globálna premenná to isté meno, lokálna premenná prekryje globálnu, funkcia teda používa svoju lokálnu premennú (bližšia košeľa ako kabát). Ak by som sa ale predsa len potreboval dostať ku globálnej premennej, tak je na to operátor rozšírenia platnosti ::.

int x;  // premennú "x" vidí akákoľvek funkcia v programe (globálna premenná)

void setup()
{
  // ...
}

void loop()
{
  int i;    // premenná "i" je viditeľná vo vnútri funkcie "loop" (lokálna premenná)
  float f;  // premenná "f" je viditeľná vo vnútri funkcie "loop" (lokálna premenná)
  // ...

  for (int j = 0; j <100; j++){
    // premenná "j" je viditeľná len tu v slučke for (lokálna premenná)
    // taktiež sú tu viditeľné aj premenné "x", "i" aj "f"
  }

 // premenná "j" už tu neexistuje
}

void mojaFunkcia() {
  int z;    // premenná "z" je viditeľná len vo vnútri funkcie "mojaFunkcia"
            // taktiež je tu viditeľná premenná "x"
  
// ... 
}

static

Ak pri lokálnej premennej použijeme špecifikátor static, premenná nezanikne ak vyskočíme z funkcie (z bloku {}), ale nestáva sa z nej globálna premenná, takže je platná len pre danú funkciu. Keby sme static neuviedli, tak by premenná zanikla pri najbližšom konci funkcie a znovu by sa inicializovala pri zavolaní funkcie.

void mojaFunkcia()  {
    static int x = 0;   // premenná "x" sa inicializuje len raz pri prvom spustení tejto funkcie
    x++;
}

// premenná "x" nezanikla a jej hodnota je zachovaná aj mimo funkcie 
// ale premenná "x" nieje viditeľná mimo tejto funkcie, nedá sa jej hodnota meniť

volatile

Deklarácia premennej typu volatile je direktíva pre kompilátor. Určuje, že si neželáme aby bola premenná v rámci optimalizácie nejak presúvaná v pamäti. Toto je dôležité ak existuje spôsob ako meniť túto premennú aj inak ako v programe, napríklad zvonka nejakým vstupom (prerušením – interrupts) z vonkajšieho hardware. Ak by program uloženie premennej nejak optimalizoval a nebola by počas celého programu tam kde mala, tak by vonkajší proces zapisoval hodnoty niekde úplne inde. Teda, čo je volatile s tým program nehýbe.

// prepína LED pri prerušení, pin zmení stav

int pin = 13;
volatile int state = LOW;

void setup()
{
  pinMode(pin, OUTPUT);
  attachInterrupt(0, blink, CHANGE);
}

void loop()
{
  digitalWrite(pin, state);
}

void blink()
{
  state = !state;
}

const

Vraví o tom, že premenná bude konštantná a teda sa nebude dať meniť počas behu programu. Táto premenná je “len pre čítanie”. To znamená, že premenná môže byť použitá rovnako ako akákoľvek iná premenná svojho typu, ale jej hodnota nemôže byť zmenená. Dostanete chybu kompilátora, ak sa pokúsite priradiť akúkoľvek hodnotu premennej typu const. Je dôležité, že hneď pri deklarácii musí byť aj definovaná. Doporučované je deklarovať konštanty použitím const ako používať #define.

const float pi = 3.14;
float x;

// ....

x = pi * 2;    // použitie konštanty "pi" vo výpočte

pi = 7;        // chybný zápis - konštantu nieje možné modifikovať

const volatile je to aj konštanta a aj sa s ňou nehýbe v pamäti (a tak vonkajší proces môže vždy načítať hodnotu premennej a nemusí sa báť, že by ju nenašiel na tom mieste kde má byť. Zapisovať do nej (do konštanty) ale nemôže).

Tento text je preložený a upravený zo stránok arduino.cc pod licenciou Creative Commons Attribution-ShareAlike 3.0.

Výber na čítanie...

Arduino LilyPad
Arduino LilyPad

Arduino LilyPad je zamýšľaný pre projekty “e-textil“. Môže byť v šitý do tkaniny spolu so senzormi, napájaním a s ohybnými vodičmi. Osadený je známym čipom ATmega328...

Čítať viac...

Dióda
Dióda

Dióda je elektrotechnická súčiastka s dvoma elektródami, označovanými ako anóda a katóda, ktorá sa vyznačuje veľmi odlišným tvarom Volt-Ampérovej charakteristiky v závislosti na polarite priloženého napätia. Po pripojení anódy na kladnejšie napätie ako je na...

Čítať viac...

Označovanie SMD rezistorov
Označovanie SMD rezistorov

Keďže rozmery SMD súčiastok sú veľmi malé, nie je možné na nich napísať celé typové označenie. Preto bolo vymyslené označovanie SMD rezistorov systémom kódovania, kde typové označenie je reprezentované troj až štvor-znakovou kombináciou. Tento kód je potom umiestnený na...

Čítať viac...

Obľúbené produkty...

Keyestudio ESP32 Smart Home Kit

133.95 EUR

61.61 EUR

Keyestudio Smart Little Turtle Robot V3

59.99 EUR

59.99 EUR

Keyestudio Ultimate IOT Super Starter Kit

52.99 EUR

52.99 EUR

Keyestudio UNO R3 Upgrated Version

18.19 EUR

18.19 EUR

Keyestudio Solar Charger Shield

9.69 EUR

9.69 EUR

Vyhľadať články
Programovanie...
  • Zložené operátory

    Použitie zložených priraďovacích operátorov zjednodušuje a sprehľadňuje zdrojový kód, no použitie...

  • Logické operátory

    Logické operátory sú && || ! (and or a not). Vykonávajú výpočet logických výrazov tvorených ich o...

  • Globálne premenné

    Premenné aj funkcie majú svoj rozsah platnosti, čiže oblasť, v ktorej fungujú a v ktorej nie. Vid...

  • Konverzie

    Možno ste sa už pri programovaní dostali do situácie, kedy si program robil s číslami a dátovými ...

  • Pomocné premenné

    Ako pomocné premenné môžeme využiť funkcie sizeof() a PROGMEM. Ich popis rozoberiem v tomto článku...

Podpora webu
Na kávu už prispeli
Dátum Meno Suma
22.03.2025 Radoslav Kopera 5€
30.12.2024 Jozef Greš 5€
20.10.2024 Radovan Nosáľ 20€
02.10.2024 Milan Durkoš 10€
08.01.2024 Veres Dusan 10€
15.05.2023 Ivan Danis 10€
28.09.2022 Ivan Vrab 7€
14.05.2022 Nemcic Marian 10€
04.02.2022 Robert Bilko 5€
29.01.2022 Peter Buffa 5€
19.11.2021 Rastislav Rehak 5€
16.09.2021 Anton Strela 5€
13.09.2021 Juraj Jedlak 5€
02.09.2021 Michal Marek 7€
08.08.2021 František Uhrík 5€
21.07.2021 Juraj Hrdina 5€
25.03.2021 Jan Nemec 10€
16.03.2021 Igor Pavlov 5€
25.02.2021 Lukas Lacuch 5€
06.11.2020 Pavol Balint 5€
05.11.2020 Marek Horečný 5€
05.10.2020 Jan Kusnir 5€
27.04.2020 Jan Zuskin 15€
26.04.2020 Dušan Sojka 5€
24.02.2020 Juraj Lackanič 5€
22.01.2020 František Žilinec 10€
20.05.2018 Tomáš F. 2€
17.12.2018 Pavol P. 5€
QR Donate 10Eur