pytanie o static

Język C dla mikrokontrolerów ARM
ODPOWIEDZ
procek87
Użytkownik
Posty: 8
Rejestracja: 09 lis 2017, 21:26

pytanie o static

Post autor: procek87 » 12 sie 2018, 10:38

Witajcie studiując BB MK wracam do zagadnień , a mianowicie" specyfikator static" w odniesieniu do zmiennych globalnych,

zmienna globalna ma zakres widoczności tylko w zakresie jednego pliku , użyta w projekcie dwu plikowym main.c i np. LCD.c, również jest widoczna tylko w pliku , w którym została powołana do życia np. .

Nierozumieniem więc za chiny dlaczego stosuje się specyfikator static dla zmiennej globalnej jeżeli bez tego specyfikatora zmienna globalna zachowuje się dokładnie tak samo jak ze specyfikatorem i jej widoczność jest dokładnie taka sama, w odniesieniu do projektów wielo-plikowych.

Pozdrawiam Procek87 (Dawid)

Awatar użytkownika
SunRiver
Administrator
Posty: 513
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Re: pytanie o static

Post autor: SunRiver » 12 sie 2018, 10:45

Zmienna statyczna zadeklarowana w bloku funkcji, zgodnie z definicją pamięta swoją wartość pomiędzy wywołaniami funkcji, co nie jest możliwe przy użyciu zwykłych zmiennych. Wartość do zmiennej statycznej przypisywana tylko raz podczas pierwszego wywołania funkcji. W przeciwieństwie do zwykłej zmiennej, zmienna statyczna nie jest niszczona po wyjściu programu z bloku gdzie została zadeklarowana dzięki temu pamięta swoją wartość pomiędzy wywołaniami funkcji.

Tak w skrócie :)
.... z każdym bitem serca ....
💫SunDUINO
💦Google+
💦Kanał Youtube
💦Sotton

procek87
Użytkownik
Posty: 8
Rejestracja: 09 lis 2017, 21:26

Re: pytanie o static

Post autor: procek87 » 12 sie 2018, 11:37

hejo sun , chodziło mi o to dlaczego stosuje się static by zmienna globalna była widoczna lokalnie w zasięgu jednego pliku skoro bez przydomka static efekt jest ten sam zmienna globalna widoczna jest w zasięgu jednego pliku po co więc static ,

moje pytanie w odniesieniu do widoczności w projektach wielo- plikowych .

;)

Awatar użytkownika
SunRiver
Administrator
Posty: 513
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Re: pytanie o static

Post autor: SunRiver » 12 sie 2018, 11:46

Zmiennych statycznych używa się jako jedno z rozwiązań uniknięcia używania zmiennych globalnych :)
daj static i global i porównaj pliki po kompilacji :)

dodatkowo zmienne globalne mają sporo wad :)

------ >
Nadużywanie zmiennych globalnych może prowadzić do poważnych problemów, takich jak:
w przypadku programów wielowątkowych, zmienna taka może być modyfikowana przez dowolny wątek, co prowadzić może do nieokreśloności przy braku synchronizacji wątków.

jeśli funkcja używa zmiennej globalnej jako zmiennej pomocniczej, niemożliwe może być jej rekursywne wywołanie

zmienne globalne zaśmiecają przestrzeń nazw, w niektórych architekturach może to doprowadzić do przepełnienia stosu

na działanie danej części kodu może mieć wpływ kod zupełnie niezwiązany, o ile oba używają tej samej zmiennej globalnej i jeden z nich ją modyfikuje.

zmienne globalne mogą kolidować ze zmiennymi lokalnymi (te drugie przesłaniają zmienne globalne o ile posiadają identyczne nazwy).

---->

dlatego warto korzystać ze zmiennych statycznych
.... z każdym bitem serca ....
💫SunDUINO
💦Google+
💦Kanał Youtube
💦Sotton

procek87
Użytkownik
Posty: 8
Rejestracja: 09 lis 2017, 21:26

Re: pytanie o static

Post autor: procek87 » 12 sie 2018, 12:13

hmm więc dlaczego nie dodaje się static do zmiennej globalnej nawet w projekcie składającym się tylko z samego main.c jeśli static wpływa tak korzystnie na wielkość kodu po kompilacji?

Dodano po 41 minutach 34 sekundach:
Czyli równie dobrze w projekcie wielo-plikowym mogę stosować zmienne globalne bez przydomka static i też będzie okej zmienna taka też będzie miała zasięg globalny dla jednego pliku w którym została zdefiniowana , tak samo zresztą jak z przydomkiem static,

może dlatego tego jeszcze nie potrafię pojąc bo jestem początkujący dlaczego po co bo tak głęboko nie siedzę w tym. :)

Awatar użytkownika
SunRiver
Administrator
Posty: 513
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Re: pytanie o static

Post autor: SunRiver » 12 sie 2018, 14:16

widzisz zmienne globalne potrafią utrudnić życie
jak masz duży kod ... przynoszą więcej kłopotów niz pożytku ,
choć są wygodne ... nie warto w sumie ich nadużywać
.... z każdym bitem serca ....
💫SunDUINO
💦Google+
💦Kanał Youtube
💦Sotton

procek87
Użytkownik
Posty: 8
Rejestracja: 09 lis 2017, 21:26

Re: pytanie o static

Post autor: procek87 » 12 sie 2018, 15:15

SunRiver pisze:
12 sie 2018, 14:16
widzisz zmienne globalne potrafią utrudnić życie
jak masz duży kod ... przynoszą więcej kłopotów niz pożytku ,
choć są wygodne ... nie warto w sumie ich nadużywać


czyli globalna z przydomkiem static już nie jest globalną zachowuje się przecież tak samo tylko z tego co widzę w książce zmienia się znaczenie i widoczność z static o bez static.

Awatar użytkownika
SunRiver
Administrator
Posty: 513
Rejestracja: 08 paź 2017, 11:27
Lokalizacja: Opole
Kontakt:

Re: pytanie o static

Post autor: SunRiver » 12 sie 2018, 18:19

No cóż nie wyjaśnię ci tak tego ...
musi dojść do sytuacji kiedy będziesz się kopał z kodem , brak błedów , i niedziałający prawidłowo :P
w tedy zrozumiesz co się stało i dlaczego ...:)
.... z każdym bitem serca ....
💫SunDUINO
💦Google+
💦Kanał Youtube
💦Sotton

procek87
Użytkownik
Posty: 8
Rejestracja: 09 lis 2017, 21:26

Re: pytanie o static

Post autor: procek87 » 12 sie 2018, 18:31

Ok , zatem trza ćwiczyć dziękuje tymczasem po prostu wpisze to static bądź nie tak jak jest w BB.

ODPOWIEDZ