mg101 napisał(a):
Oznacza to, że zmienna bufor nie będzie widoczna w innych plikach.
Ale czy jest to konieczne, skoro w pliku klawiatura.h nie ma żadnej deklaracji odnośnie zmiennej bufor?
W tym deklaracji extern uint8_t bufor;
Oczywiście będzie to działało, ale dla mnie są to 2 grzyby w barszczu.
No tak tylko po co takie podejście, że są to 2 grzyby w barszczu ??? czyli co - że jakaś głupota kompilatora czy też języka C ? chce kolega powiedzieć ?
A może jednak warto sobie dalej podrążyć temat i dowiedzieć się więcej - zamiast uznawać to za nonsens. Nie jest tak prosto czasem zdalnie przez książkę wytłumaczyć WSZYSTKO a szczególnie początkującej osobie, która na tym etapie programowania rzadko nawet skorzysta z takiego mechanizmu.
Specyfikator static może działać i działa w CAŁKIEM inny sposób gdy stosujemy go do zmiennych GLOBALNYCH i całkiem inaczej dla zmiennych LOKALNYCH (automatycznych) ..... najpierw proszę sobie dobrze poćwiczyć i zrozumieć te dwie rzeczy - jak radzi kolega wyżej, aby przejść ze zrozumieniem do dalszych rzeczy. Bo zwykle próba okiełznania następnego tematu zanim poprzedni się dobrze zrozumie skutkuje brakiem zrozumienia. Ale jak mówię - ja zawsze gdy czegoś nie rozumiem w jakimś języku - to myślę sobie - że trzeba dalej nad typ popracować i rozgryźć zamiast pisać gdzieś na forum że to nonsens. To tak jakby początkująca osoba nagle wyłapała MEGA BŁĄD kompilatora czy PODSTAW języka C. Szok. Gdyby kompilatory i sam język C były najeżone tego typu błędami to nie sądzi kolega że już dawno tysiące osób by o tym pisało? że już dawno błąd zostałby poprawiony ???? eeeeh
więc spróbuję to przybliżyć jeszcze troszkę... i będę mówił o STATIC ale w aspekcie zastosowania dla zmiennej globalnej.
I tu pewnie pierwsza konsternacja - no bo jak to globalnej ? Tak tak - bo pewnie kolega przeoczył, że pojęcie GLOBALNA zmienna obowiązuje w języku C nie do CAŁEGO PROJEKTU - czyli WSZYSTKICH plików a TYLKO do tego jednego pliku *.C w którym jest jej definicja - i to proszę sobie zapamiętać. Tą "ala globalność" dla całego projektu można uzyskać dopiero dzięki właśnie DEKLARACJOM zmiennych czyli tych ze specyfikatorem extern !!!
Jednak stosuje się czasem specyfikator STATIC w stosunku do takich zmiennych GLOBALNYCH w ramach pliku *.c z dwóch powodów:
1. po to aby zmienne te nie były widoczne (udostępnione dla innych plików projektu) np jakaś hermetyczna biblioteka
2. także po to aby dać kompilatorowi możliwość jeszcze lepszej optymalizacji dostępu do takich zmiennych, często się okazuje, i przecież MOŻNA to samemu sprawdzić, że po dodaniu specyfikatora static nagle okazuje się, że np zmieniła się ilość zajętości pamięci FLASH po kompilacji i to na PLUS. Nie oznacza to że takie zalety ujrzymy pisząc jednoplikowy projekt, gdzie mamy TYLKO main.c i w nim zmienne globalne, którym dodamy static. Wtedy może nie być żadnej korzyści - po prostu kompilator to zignoruje.
Uwaga! jeśli ktoś nie rozumiem powyżej pkt.1 to proponuję na razie nie zaprzątać sobie tym głowy - aż do czasu kiedy będzie się pisało większe projekty wieloplikowe.
_________________
zapraszam na blog:
http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj
Kurs EAGLE ] [ mój kanał YT TV
www.youtube.com/mirekk36 ]