Zmienne są dalej klasyfikowane jako zmienna "lokalna" i "globalna", która jest głównym tematem naszej dyskusji. Tutaj główna różnica między zmienną lokalną i globalną polega na tym, że zmienna lokalna jest zadeklarowana w bloku funkcyjnym, gdzie jako zmienna globalna zadeklarowana jest poza funkcjami programu.
Przyjrzyjmy się nieco większym różnicom pomiędzy zmienną lokalną i globalną oraz tabelą porównawczą.
Wykres porównania:
Podstawa do porównania | Zmienna lokalna | Globalna zmienna |
---|---|---|
Deklaracja | Zmienne są deklarowane wewnątrz funkcji. | Zmienne są zadeklarowane poza jakąkolwiek funkcją. |
Zakres | W ramach funkcji, w której są zadeklarowane. | Przez cały czas trwania programu. |
Dostęp | Dostęp tylko do instrukcji, wewnątrz funkcji, w której są zadeklarowane. | Dostęp do dowolnej instrukcji w całym programie. |
Życie | Tworzone, gdy blok funkcyjny jest wprowadzany i niszczony przy wyjściu. | Pozostań w grze przez cały czas wykonywania programu. |
Przechowywanie | Zmienne lokalne są przechowywane na stosie, chyba że określono inaczej. | Przechowywany w ustalonej lokalizacji, określony przez kompilator. |
Definicja zmiennej lokalnej
Zmienna lokalna jest zawsze deklarowana w bloku funkcyjnym. W C, zmienna lokalna jest zadeklarowana na początku bloku kodu. W C ++ można je zadeklarować w dowolnym miejscu w bloku kodu przed ich użyciem. Do zmiennych lokalnych można uzyskać dostęp tylko za pomocą instrukcji napisanych wewnątrz funkcji, w której deklarowana jest zmienna lokalna. Są bezpieczne w tym sensie, że nie mogą uzyskać dostępu do żadnej innej funkcji tego samego programu.
Zmienna lokalna istnieje dopóki blok funkcji nie zostanie wykonany, a przez to zniszczony po zakończeniu wykonywania bloku. Zmienne lokalne tracą swoją zawartość, gdy tylko wykonanie opuści blok, w którym są zadeklarowane.
Powodem jest to, że zmienne lokalne są przechowywane na stosie, o ile nie określono ich specjalnej pamięci. Stos ma charakter dynamiczny, a zmiana miejsca w pamięci prowadzi do tego, że zmienna lokalna nie zachowuje swojej wartości, gdy tylko blok funkcji istnieje.
Uwaga:
Istnieje jednak sposób na zachowanie wartości zmiennej lokalnej za pomocą modyfikatora "statycznego".
Definicja globalnej zmiennej
Zmienna globalna jest zadeklarowana poza wszystkimi funkcjami obecnymi w programie. W przeciwieństwie do zmiennych lokalnych, do zmiennej globalnej można uzyskać dostęp za pomocą dowolnej funkcji znajdującej się w programie. Zmienne globalne nie są zbyt wiarygodne, ponieważ ich wartość można zmienić za pomocą dowolnej funkcji obecnej w programie.
Zmienne globalne istnieją do momentu całkowitego wykonania całego programu. Zmienne globalne zachowują swoje wartości do momentu wykonania programu. Powodem jest to, że są one przechowywane w ustalonym regionie pamięci, o czym decyduje kompilator.
Zmienna globalna jest pomocna w sytuacjach, w których wiele funkcji uzyskuje dostęp do tych samych danych. Używanie dużej liczby zmiennych globalnych może być problematyczne, ponieważ mogą wystąpić niepożądane zmiany wartości zmiennej globalnej.
Kluczowa różnica pomiędzy zmienną lokalną a globalną.
- Zmienne lokalne są nazywane "lokalnymi", ponieważ są znane tylko w instrukcjach napisanych w funkcji, w której są zadeklarowane i nie są znane żadnej innej funkcji znajdującej się poza tym blokiem funkcyjnym. W przypadku zmiennej globalnej są one znane każdej z funkcji obecnych w programie; stąd są one nazywane "globalnymi".
- Zmienne globalne zachowują swoją wartość do czasu, gdy program znajduje się w fazie wykonania, ponieważ są przechowywane w ustalonej lokalizacji ustalonej przez kompilator. Zmienne lokalne są przechowywane na stosie; w związku z tym nie zachowują swojej wartości, ponieważ "stos" ma charakter dynamiczny, ale kompilator można skierować, aby zachować jego wartość, używając "statycznego" modyfikatora.
- Jeśli deklarowana jest zmienna globalna i lokalna o tej samej nazwie, wówczas wszystkie instrukcje bloku kodu, w którym zadeklarowana jest zmienna lokalna, będą odnosić się tylko do zmiennej lokalnej i nie spowodują żadnego efektu dla zmiennej globalnej.
- Zmienna lokalna jest niszczona, gdy kontrola programu wychodzi z bloku, w którym deklarowana jest zmienna lokalna. Jednak zmienna globalna jest niszczona po zakończeniu działania całego programu.
Wniosek:
Zmienne lokalne i globalne są równie potrzebne podczas pisania programu. Jednak deklarowanie dużej liczby zmiennych globalnych może być problematyczne w dużym programie, ponieważ może powodować niepożądane zmiany w zmiennej globalnej; i trudno byłoby określić, która część programu dokonała tej zmiany. Dlatego należy unikać zgłaszania niepotrzebnych zmiennych globalnych.