Mikrokontrolery - Jak zacząć?

... czyli zbiór praktycznej wiedzy dot. mikrokontrolerów.

czwartek, 10 lutego 2011

Kurs języka C: Zmienne lokalne


Autor: Dondu

Kurs języka C: Spis treści

Zmienne lokalne to zmienne, które są dostępne tylko i wyłącznie w jakiejś funkcji lub jej części.

W artykule o zmiennych globalnych poznałeś już typ zmiennej, która dostępna jest w każdej części programu. Nie zawsze jednak chcemy, by zmienna była zmienną globalną. Czasami przyda się nam zmienna, która będzie dostępna tylko w jakiejś funkcji, czy wręcz tylko w jej części.


Zmienna lokalna dostępna w całej funkcji

To najczęściej wykorzystywany przypadek zmiennej lokalnej. Zmienna taka jest widziana tylko i wyłącznie w danej funkcji.

Przykład 1 (w kompilatorze)
int main(void)
{
  
  //zmienna lokalna dostępna tylko dla funkcji main()
  char ilosc_koni = 5;  
  
  //wyświetl zmienną 
  printf("ilosc_koni = %d \n", ilosc_koni);

  return 0;
}

Sprawdźmy, czy na pewno tak zdefiniowana zmienna jest widziana tylko w funkcji main(). W tym celu zdefiniujemy sobie dodatkową funkcję pokaz(), w której spróbujemy użyć zmiennej lokalnej zdefiniowanej w funkcji main().

Przykład 2 (w kompilatorze)
void pokaz(void){

  //wyświetl zmienną 
  printf("W pokaz() ilosc_koni = %d \n", ilosc_koni);

}

int main(void)
{
  
  //zmienna lokalna dostępna tylko dla funkcji main()
  char ilosc_koni = 5;  

  //wyświetl zmienną 
  printf("W main() ilosc_koni = %d \n", ilosc_koni);

  //wywołaj funkcję pokaz()
  pokaz();

  return 0;
} 

Na potwierdzenie tego, że zmienna ilosc_koni jest dostępna tylko w funkcji main() kompilator zaprotestował komunikatem:

4: error: ‘ilosc_koniundeclared (first use in this function)

czyli informacją o tym, że w linii nr 4, czyli funkcji pokaz(), używamy niezadeklarowanej zmiennej ilosc_koni.


Kurs języka C: Spis treści

5
Oceń artykuł.
Wasze opinie są dla nas ważne, gdyż pozwalają dopracować poszczególne artykuły.
Pozdrawiamy, Autorzy
Ten artykuł oceniam na:

2 komentarze:

  1. Brakuje przykładu zmiennej lokalnej dostępnej tylko w części funkcji, np.
    void funkcja(void){
    char lokalna_w_calej = 5;
    // jakiś kod
    {
    char lokalna_w_czesci = 3;
    // wyświetl zmienną, tu powinien ją widzieć
    printf("lokalna_w_czesci = %d \n", lokalna_w_czesci);
    }
    // wyświetl zmienną, tu kompilator powinien zaprotestować
    printf("lokalna_w_czesci = %d \n", lokalna_w_czesci);
    }

    Zmienna dostępna w części kodu może być zdefiniowana wewnątrz nawiasu klamrowego z niczym nie związanego lub też nawiasu klamrowego będącego częścią if, switch / case itp.

    Ciekawym przykładem może być z tego co pamiętam takie coś:

    int main(void){
    char zmienna = 5;

    if(zmienna == 5){
    char zmienna = 1; // deklaracja zmiennej widocznej tylko wewnątrz if, a mającej taką samą nazwę :)
    printf("zmienna wewnątrz if = %d \n", zmienna);
    zmienna++;
    // wyświetl zmienną po inkrementacji
    printf("zmienna po inkrementacji = %d \n", zmienna);
    }
    // jaką wartość ma zmienna po wyjściu z if?
    printf("zmienna po wyjściu z if = %d \n", zmienna);
    return 0;
    }

    OdpowiedzUsuń
    Odpowiedzi
    1. Ajć, teraz widzę, że ta część jest opisana w "zmienna lokalna blokowa" ;) W artykule przydałby się link, że lokalna dostępna w części opisana jest w artykule -> link. Ale mój drugi przykład i tak jest fajny i jeśli chcecie, możecie go dodać, bo ten obecny nie w pełni obrazuje "przykrywanie", a jedynie pokazuje niedostępność poza blokiem ;)

      Usuń

Działy
Działy dodatkowe
Inne
O blogu




Dzisiaj
--> za darmo!!! <--
1. USBasp
2. microBOARD M8


Napisz artykuł
--> i wygraj nagrodę. <--


Co nowego na blogu?
Śledź naszego Facebook-a



Co nowego na blogu?
Śledź nas na Google+

/* 20140911 Wyłączona prawa kolumna */
  • 00

    dni

  • 00

    godzin

  • :
  • 00

    minut

  • :
  • 00

    sekund

Nie czekaj do ostatniego dnia!
Jakość opisu projektu także jest istotna (pkt 9.2 regulaminu).

Sponsorzy:

Zapamiętaj ten artykuł w moim prywatnym spisie treści.